Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用文件和手册中的cin.get输入值的差异_C++_File Io_Input - Fatal编程技术网

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

C++ 使用文件和手册中的cin.get输入值的差异,c++,file-io,input,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; } } 打印ar[0][1]时得到2,这是正确的。为什么该代码

我写了一些代码,需要一个接一个地获取值并将它们存储到一个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;
    }
}
打印ar[0][1]时得到2,这是正确的。为什么该代码的行为会有所不同?这是因为文件是完整的81个字符,后跟\n和eof,而后面只有几个值,后跟^d吗


谢谢。

您没有在正确的时间检查
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);
        }
(…)的

对于(…)
如果(cin.get(温度))
ar[i][j]=temp-'0';
其他的
{

std::cerr
temp
变量的类型是什么?它是一个字符,很抱歉没有包括在内。当您重定向“inp.txt”时,您是否检查了您是否真的进入了循环?
./prog.out
12345678 ^d
for(...)
    for(...)
        if (cin.get(temp))
            ar[i][j] = temp - '0';
        else
        {
            std::cerr << "insufficient input\n";
            exit(1);
        }