J'ai rencontré un problème vraiment étrange. Je peux reproduire sur mon portable win7 ainsi que sur une machine ubuntu.Les nombres de C++ cin ignorent la première ligne?
J'ai un programme C++ comme ceci:
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 9; i++) {
string line;
getline(cin, line);
stringstream ss(line);
for (int j = 0; j < 9; j++) {
int p = 8;
ss >> p;
cout << p;
}
cout << endl;
}
return 0;
}
Maintenant, si je le compiler une course avec ./a.out < test.txt
où text.txt
contient:
1 2 3 4 5 6 7 8 9
2 2 3 4 5 6 7 8 9
3 2 3 4 5 6 7 8 9
4 2 3 4 5 6 7 8 9
5 2 3 4 5 6 7 8 9
6 2 3 4 5 6 7 8 9
7 2 3 4 5 6 7 8 9
8 2 3 4 5 6 7 8 9
9 2 3 4 5 6 7 8 9
Il sortira (sans espaces):
8 8 8 8 8 8 8 8 8
2 2 3 4 5 6 7 8 9
3 2 3 4 5 6 7 8 9
4 2 3 4 5 6 7 8 9
5 2 3 4 5 6 7 8 9
6 2 3 4 5 6 7 8 9
7 2 3 4 5 6 7 8 9
8 2 3 4 5 6 7 8 9
9 2 3 4 5 6 7 8 9
Pourquoi la première ligne est-elle incorrecte? J'ai aussi essayé de lire la première ligne de la boucle. En outre, si je remplace ss > p
avec cin > p
je viens d'obtenir une table de sortie pleine de 8.
Cela n'a aucun sens !!
D'accord, vous aviez raison. Certains trucs bizarres comme le premier caractère de mon fichier d'entrée:
od -c test.txt
0000000 357 273 277 2 0 5 0 0 7 0
0000020 0 6 \n 4 0 0 9 6 0
0000040 0 2 0 \n 0 0 0 0 8
Peut-être qu'il y a quelque chose de génial dans votre fichier 'test.txt' - peut-être le regarder avec un éditeur hexadécimal? J'obtiens le contenu de 'test.txt' (sans espaces) en écho quand je compile/cours avec GCC 4.5.1 (MinGW) ou avec VS2010. –
Je pense qu'il y a une ligne vide au début de votre test.txt (ou quelque chose qui n'est pas numérique). –
les chaînes de format sont meilleures! – Svisstack