lire mot par mot à partir du fichier en C ++
cette fonction devrait lire un fichier word en word
et il fonctionne jusqu'au dernier mot, où l'exécution s'arrête
void readFile( )
{
ifstream file;
file.open ("program.txt");
string word;
char x ;
word.clear();
while ( ! file.eof() )
{
x = file.get();
while ( x != ' ' )
{
word = word + x;
x = file.get();
}
cout<< word <<endl;
word.clear();
}
}
tout voir quel est le problème et comment il peut être résolu??
source d'informationauteur M.Tamimi
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne tourne pas en boucle
while (!eof())
il ne fonctionnera pas comme vous l'attendez, parce que leeofbit
ne sera pas jusqu'à ce que après un échec de lire à la fin du fichier.Deuxièmement, l'entrée normale de l'opérateur
>>
sépare sur les espaces et peuvent donc être utilisés pour lire des "mots":J'ai édité la fonction pour vous,
ce que vous faites ici, c'est la lecture d'un caractère à la fois à partir du flux d'entrée et de supposer que tous les caractères entre " de " représenter un mot. MAIS il est peu probable d'être un "" après le dernier mot, donc c'est probablement pourquoi il ne fonctionne pas:
Si je peut je pouvais vous donner quelques nouvelles de code pour la même tâche, dans mon code, vous pouvez créer un "document" (pas vraiment)et il est sauvé, et peut être ouvert de nouveau. Il est également stockées sous forme de chaîne de fichier(pas un document).
Voici le code:
Il suffit de prendre ce code et de le modifier pour servir vos fins.
RÊVER EN GRAND,PENSEZ GRAND, GROS
Comme d'autres l'ont dit, vous êtes susceptible de lecture atteint la fin du fichier que vous êtes la seule vérification pour
x != ' '
. Au lieu de cela, vous devez également vérifier pour les expressions du FOLKLORE dans la boucle interne (mais dans ce cas, n'utilisez pas un char, mais suffisamment grand type):Mais là encore, vous pouvez seulement employer le flux de streaming opérateurs, qui déjà séparés à l'espace (et de mieux tenir compte des espaces multiples et d'autres types de whitepsace):
Et même encore plus, vous pouvez employer un algorithme standard pour se débarrasser du manuel de la boucle: