Я столкнулся с действительно странной проблемой. Я могу воспроизвести на моем ноутбуке win7, а также на машине ubuntu.Номера C++ cin игнорируют первую строку?
У меня есть C++ программы следующим образом:
#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;
}
Теперь, если я скомпилировать его прогон его ./a.out < test.txt
где text.txt
содержит:
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
Он будет выводить (без пробелов):
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
Почему первая линия неправильная? Я тоже пробовал читать первую строку из цикла. Кроме того, если я заменил ss > p
на cin > p
, я просто получу выходной стол, полный 8-х.
Это не имеет никакого смысла!
Хорошо, вы, ребята, были правы. Некоторые странные вещи в качестве первого символа моего входного файла:
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
Возможно, в вашем файле 'test.txt' есть что-то напуганное - может быть, посмотреть на него с помощью шестнадцатеричного редактора? Я получаю содержимое «test.txt» (без пробелов), эхом, когда я компилирую/запускаю с помощью GCC 4.5.1 (MinGW) или с VS2010. –
Я думаю, что есть пустая строка в начале вашего test.txt (или что-то, что не является числовым). –
строки формата лучше! – Svisstack