使用文件和手册中的cin.get输入值的差异

时间:2013-01-28 06:37:12

标签: c++ file-io input

我正在编写一些需要逐个获取值并将它们存储到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?

感谢。

1 个答案:

答案 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);
        }