我遇到了一個非常奇怪的問題。我可以在我的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
爲什麼第一行錯了?我已經嘗試從循環中讀取第一行。 另外,如果我用cin > p
替換ss > 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'文件中有些東西 - 可能用十六進制編輯器來查看它?當我使用GCC 4.5.1(MinGW)或VS2010進行編譯/運行時,我收到了'test.txt'(不含空格)的內容。 – 2010-11-19 22:42:37
我想你的test.txt(或者不是數字的)開頭有一個空行。 – 2010-11-19 22:49:36
格式字符串更好! – Svisstack 2010-11-19 22:53:54