J'ai une fonction qui est censée lire un fichier char par char et sortir à la console jusqu'à ce qu'elle atteigne EOF. La fonction fonctionne bien affichant tous les caractères que je veux, mais elle continue juste, et ne s'arrête jamais à la fin.Fonction de problème avec EOF
ci-dessous est la fonction
void displayAllLines(ifstream &joke)
{
char ch;
joke.clear();
ch = joke.get();
while (ch != EOF)
{
cout << ch;
ch = joke.get();
}
}
Contenu du fichier ci-dessous la liste
"(ligne blanche) Q: Qu'est-ce que la langue disent aux dents?" Comme je l'ai dit, il affiche la ligne très bien, mais la boucle continue après le point d'interrogation.
Vous ne savez pas pourquoi? En outre, plus d'informations sont-elles nécessaires pour répondre correctement à ma question?
C'est juste une habitude qu'on m'a enseignée quand j'ai commencé avec un fichier. Juste en s'assurant qu'il n'y a pas de drapeaux dessus au début. Pensez-vous que cela ne sert à rien, ou pensez-vous que cela peut nuire à un programme? EDIT :: Comme pour le code que vous avez posté, il progresse certainement le programme, mais ne tient pas compte des caractères espace, et affiche tout sans espaces – Podo
Aussi, curieux si vous avez des idées pourquoi mon code * ne * travail. – Podo
Je ne pense pas que vous devriez appeler aveuglément «clear()». S'il y a des drapeaux, alors ce serait pour une raison et simplement les effacer n'aidera pas. Votre code ne fonctionne pas car les flux C++ ne lisent pas EOF comme un caractère comme le fait C. Les flux C++ lisent les caractères jusqu'à ce qu'ils atteignent EOF. (Ils ne retournent jamais le caractère EOF - c'est un truc en C. – Phil