C++ 使用文件和手册中的cin.get输入值的差异
我写了一些代码,需要一个接一个地获取值并将它们存储到一个2D int数组中,当从文件中获取值并手动输入它们时,会有差异。看起来是这样的: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,这是正确的。为什么该代码
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::cerrtemp
变量的类型是什么?它是一个字符,很抱歉没有包括在内。当您重定向“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);
}