1

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

并为 ar[0][1] 之类的随机值获取 -38 的值,但是当我键入时我会得到正确的值

./prog.out
12345678 ^d

打印 ar[0][1] 时得到 2,这是正确的。为什么这段代码会有不同的表现?是因为文件是完整的 81 个字符,后跟 \n 和 eof,而后跟 ^d 的只是几个值?

谢谢。

4

1 回答 1

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);
        }
于 2013-01-28T06:55:37.623 回答