Comment ne plus indiquer d'entrée pour la chaîne ss dans la boucle while (cin & gt; & gt; ss)
J'ai utilisé "cin" de lire les mots à partir du flux d'entrée, qui, comme
int main( ){
string word;
while (cin >> word){
//do sth on the input word
}
//perform some other operations
}
La structure du code est quelque chose comme ci-dessus. Il est compilable. Au cours de l'exécution, je garde la saisie de quelque chose comme
aa bb cc dd
Ma question est comment mettre fin à cette entrée? En d'autres termes, supposons que le fichier texte est simplement "aa bb cc dd". Mais je ne sais pas comment faire pour que le programme a savoir que le fichier se termine.
source d'informationauteur user630983
Vous devez vous connecter pour publier un commentaire.
Votre code est correct. Si vous avez été de manière interactive la saisie, vous devez envoyer un caractère EOF, telles que CTRL-D.
Ce caractère EOF n'est pas nécessaire lors de la lecture dans un fichier. C'est parce que dès que vous atteignez la fin de votre flux d'entrée, il n'y a rien à "cin"(parce que le flux est maintenant fermé), donc la boucle while s'arrête.
Comme d'autres de répondre à cette question, je voudrais ajouter ce point important:
Depuis Ctrl-Z sur Windows (et Ctrl-D sur les systèmes unix) provoque des expressions du FOLKLORE à atteindre, et vous sortez de la
while
boucle, mais en dehors de lawhile
boucle vous ne pouvez pas lire plus de commentaires, puisque les expressions du FOLKLORE est déjà atteint.De sorte à permettre la lecture à l'aide de
cin
encore une fois, vous avez besoin de videreof
drapeau, et tous les autres échec drapeaux, comme indiqué ci-dessous:Après avoir fait cela, vous pouvez commencer la lecture de la saisie à l'aide
cin
une fois de plus!Appuyez sur Ctrl-Z (Ctrl-D sur les systèmes *nix) et appuyez sur entrée. Qui envoie un EOF et annule le flux.
cin >> some_variable_or_manipulator
sera toujours évalué par rapport à une référence àcin
. Si vous voulez vérifier et voir si il n'y a plus d'entrée encore à lire, vous avez besoin de faire quelque chose comme ceci:Il contrôle le flux de goodbit, qui est à true lorsque aucun des eofbit, failbit n', ou badbit sont fixés. Si il y a une erreur de lecture, ou le flux reçu un caractère EOF (d'atteindre la fin d'un fichier ou de l'utilisateur au clavier en appuyant sur les touches CTRL+D), cin.bonne() retourne false, et vous sortir de la boucle.
Je suppose que vous voulez sauter à la fin du fichier.
Vous pouvez obtenir la valeur de basic_ios::eof , il renvoie la valeur true à la fin du cours d'eau.
Prendre l'entrée à partir d'un fichier. Ensuite, vous trouverez que la boucle while se termine lorsque votre programme cesse de prendre de l'entrée.
En fait
cin
cesse de prendre de la saisie lorsqu'il trouve un marqueur EOF. Chaque fichier d'entrée se termine avec ce marqueur EOF. Lorsque ce marqueur EOF rencontrées paroperator>>
il modifie la valeur de l'indicateur interneeofbit
dans les faux et, par conséquent, la boucle while s'arrête.Il m'aide à mettre fin à la boucle en appuyant sur ENTRÉE.
Vous pouvez faire un chèque pour un mot en entrée.
F. e. "stop":
votre programme ne prend pas en compte les espaces blancs. faire la différence entre le cin et getline...
voici un exemple avec un truc: le programme d'entrée et de sortie des impressions jusqu'à ce que vous frappez deux fois sur Entrée pour quitter: