Ich bin auf ein wirklich seltsames Problem gestoßen. Ich kann auf meinem win7 Laptop sowie einem ubuntu Rechner reproduzieren.C++ cin Zahlen ignoriert die erste Zeile?
Ich habe ein C++ Programm wie folgt:
#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;
}
Nun, wenn ich es ein Lauf mit ./a.out < test.txt
kompilieren, wo text.txt
enthält:
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
Es wird ausgegeben (ohne Leerzeichen):
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
Warum ist die erste Zeile falsch? Ich habe versucht, auch die erste Zeile aus der Schleife zu lesen. Auch, wenn ich ss > p
durch cin > p
ersetze, bekomme ich nur eine Ausgabetabelle voller 8.
Das ergibt keinen Sinn !!
Okay, ihr habt recht gehabt. Einige seltsame Dinge als erstes Zeichen meiner Eingabedatei:
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
Vielleicht gibt es etwas funky in Ihrer 'test.txt' Datei - vielleicht mit einem Hex-Editor? Ich bekomme den Inhalt von 'test.txt' (ohne Leerzeichen), wenn ich mit GCC 4.5.1 (MinGW) oder mit VS2010 kompiliere/laufe. –
Ich denke, es ist eine leere Zeile am Anfang Ihrer test.txt (oder etwas, das nicht numerisch ist). –
Formatzeichen sind besser! – Svisstack