【发布时间】:2010-11-20 07:07:34
【问题描述】:
我遇到了一个非常奇怪的问题。我可以在我的 win7 笔记本电脑和 ubuntu 机器上重现。
我有一个像这样的 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(不带空格)的内容。 -
我认为你的 test.txt 的开头有一个空行(或者不是数字的东西)。