我正在编写一些需要逐个获取值并将它们存储到2D int数组中的代码,并且从文件中获取值并手动输入它们时存在差异。它看起来像这样:
int ar[9][9];
while(!cin.eof()){
for(int i=0; i<9; i++)
for(int j=0; j<9; j++)
{
cin.get(temp);
ar[i][j] = temp -48;
}
}
我会从运行它的终端传入输入,如
./prog.out < inp.txt
并获得-38的值作为随机值,如ar [0] [1],但是当我输入
时我会得到正确的值./prog.out
12345678 ^d
打印ar [0] [1]时得2,这是正确的。为什么这段代码的行为不同?是因为文件是完整的81个字符,后跟\ n和\ nof,相比之下只有几个值后跟^ d?
感谢。
答案 0 :(得分:2)
你没有在正确的时间检查eof
- 当尝试读取一个值时,它被设置,而不是事先 - 因此行为有点随机。并且,你假设不在eof意味着你可以阅读81个值...你怎么知道你不是eof
以外的新线?而且你没有检查cin.get()
....
我建议简单地
for(...)
for(...)
if (cin.get(temp))
ar[i][j] = temp - '0';
else
{
std::cerr << "insufficient input\n";
exit(1);
}