2010-05-09 5 views
0

Ce morceau de code fonctionne infiniment:Copie à partir istream ne cesse jamais

copy(istream_iterator<char>(cin), istream_iterator<char>(), back_inserter(buff)); 

Le comportement que je me attendais est qu'il arrêtera quand j'appuyez sur Entrée.
Cependant, ce n'est pas le cas.
buff est un vecteur de caractères.

Répondre

2

Je suppose que vous tapez des données dans le clavier.

La touche Entrée ne signifie pas la fin du flux. C'est juste un autre personnage du point de vue cin. Vous devez soumettre EOF pour y parvenir (Ctrl +Z, Entrez sur Windows et Ctrl +D sur Unix/Mac). Incidemment, ce n'est pas la manière habituelle de lire les caractères de la console. Il est très inefficace (istream_iterator appelle operator>> pour chaque caractère) et se comportera mal avec des espaces. Pour lire une ligne de saisie de données, utilisez plutôt getline.

+0

Donc, fondamentalement, ce que vous dites, c'est que je suis en train de coder cette erreur? –

+0

Oui; J'ai modifié la question pour refléter ce que je pense que vous essayez d'accomplir. –

+0

J'ai essayé getline mais cela ne fonctionne pas avec un vecteur. Ca marche quand je coche >> tempstring; puis copiez-le dans le vecteur mais il est très inefficace à mon avis. –