2017-09-12 5 views
1

Donc, j'ai un problème où je lis dans un fichier texte en utilisant cin. Voici une idée de base de mon code:redirection de fichiers texte C++ getline boucle infinie

while(getline(cin,line) { 
cout << line << endl; 
} 
//Do some task 
return 0; 

Le problème que je suis en cours d'exécution en est que la boucle ne se termine pas et // faire une tâche ne fonctionnera jamais. La seule solution que j'ai trouvée est de regarder directement le fichier texte, voir combien de lignes de texte il y a, et le code dur est conditionnel pour en sortir. Donc disons que j'ai un fichier texte avec 5 lignes et une ligne int int. Alors je ferais quelque chose comme ceci:

while(getline(cin,line) { 
cout << line << endl; 
if(row == 5) { 
break; 
} 
//Do some task 
return 0; 

J'ai essayé googling mais je n'arrive pas à trouver une réponse n'importe où. Des idées? Et seules les bibliothèques que je suis autorisé à utiliser sont iostream.

+0

Je n'utilise pas fstream. J'utilise eclipse et je suis allé dans les configurations d'exécution et redirigé cin pour utiliser un fichier texte externe. –

+0

Je viens de lancer la première version de votre programme, fonctionne parfaitement pour moi. Qu'y a-t-il dans votre fichier? – atru

+0

est ligne initialisée à 0? et où l'incrémentez-vous? et utilisez l'objet ifstream –

Répondre

0
#include <iostream> 
#include <string> 
#include <fstream> 

int main() 
{ 
    std::string line; 
    std::fstream fin; 
    fin.open("test.txt"); 
    while (getline (fin, line)) 
     std::cout << line << std::endl; 
    fin.close(); 

    //Do smth here 

    return 0; 
} 
0

Le bloc de code suivant devrait résoudre votre problème: Le crédit va à l'auteur: kevinchkin http://www.cplusplus.com/forum/beginner/8388/

#include<iostream> 
#include<fstream> 

using namespace std; 

int main() { 

ifstream myReadFile; 
myReadFile.open("text.txt"); 
char output[100]; 
if (myReadFile.is_open()) { 
while (!myReadFile.eof()) { 


    myReadFile >> output; 
    cout<<output; 


    } 
} 
myReadFile.close(); 
return 0; 
} 

Ceci est un modèle de base pour la lecture d'un fichier txt. Je ne peux pas non plus trouver de raison pour laquelle vous ne devriez pas utiliser plus que iostream. Ils font les autres bibliothèques car iostream n'est pas la meilleure façon de s'y prendre. La plupart (sinon la totalité) des enseignants/professeurs Je l'ai aimé quand les élèves vont au-delà de ce que la classe étudie, et essayent d'en savoir plus. Si vous avez besoin d'aide supplémentaire, jetez un oeil à: http://www.cplusplus.com/doc/tutorial/files/

+1

Veuillez lire ce sujet: [Pourquoi iostream :: eof est-il dans une condition de boucle considérée comme incorrecte?] (Https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered- mauvais) –

+0

J'ai dit modèle, et j'ai fait un lien vers l'endroit où j'ai obtenu le code, j'espère que RandomGuy regarde là aussi. Ce que j'ai vu dans ce fil, c'est que vous devez faire attention à la façon dont vous utilisez EOF, pas que vous ne devriez pas. Ma compréhension du bloc de code ici est que si nous ne sommes pas à l'EOF, il y a une autre ligne, alors allez-y. Si nous sommes à EOF, n'allez pas chercher ce qui n'existe pas –

+0

'EOF' est juste un drapeau, et la fonction' .eof() 'retourne juste la valeur du drapeau, donc en faisant un appel'. eof() ', vous ne pouvez pas toujours dire si vous êtes à la fin du fichier ou non. Ce que vous pouvez dire est, _si la dernière déclaration que j'ai exécutée a rendu le drapeau 'EOF' vrai ou non. Et le drapeau 'EOF' obtient seulement la valeur' true' si vous essayez de lire quelque chose à partir du fichier et qu'il y trouve le caractère de fin de fichier, mais que vous lisez depuis le fichier dans le corps de la boucle, donc, en utilisant le 'eof()' dans la condition de boucle fait fonctionner la boucle une fois de plus. –