17 votes

Lecture d'un flux d'entrée avec C++

J'utilise le code suivant :

#include <iostream>
using namespace std;

int main(int argc, char **argv) {
    string lineInput = " ";
    while(lineInput.length()>0) {
        cin >> lineInput;
        cout << lineInput;
    }
    return 0;
}

Avec la commande suivante : echo "Hello" | test.exe

Le résultat est une boucle infinie qui imprime "Hello". Comment puis-je faire en sorte qu'elle lise et imprime un seul "Hello" ?

27voto

Erik Points 38942
string lineInput;
while (cin >> lineInput) {
  cout << lineInput;
}

Si vous voulez vraiment des lignes complètes, utilisez :

string lineInput;
while (getline(cin,lineInput)) {
  cout << lineInput;
}

12voto

Ben Voigt Points 151460

Lorsque cin ne parvient pas à extraire, il ne modifie pas la variable cible. Donc, quelle que soit la dernière chaîne de caractères lue avec succès par votre programme, elle reste bloquée dans le fichier lineInput .

Vous devez vérifier cin.fail() y Erik a montré la meilleure façon de le faire. .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X