我试图直接从命令行输入文件后使用cin读取int。这是我的文件:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
它们是81个数字。这是有问题的代码:
#include <iostream>
using namespace std;
int main()
{
int array[81];
for(int i = 0; i < 81; i++)
cin >> array[i];
int x = 999;
cin >> x;
cout << x << endl;
return 0;
}
我试图这样输入文件:
./a.out < myfile
但是,cin >>
不会停止并直接输出999作为输出。我已经尝试过cin.clear()
和cin.ignore(INT_MAX, 'n')
,但是它们都不起作用。然后,我认为输入这样的文件有一些特殊之处,因此我在运行a.out(不使用< myfile
输入)后键入所有81个数字,如果这样做,程序将继续接受输入并永不停止或打印。
我不知道我遇到了什么...?
答案 0 :(得分:2)
cin >> x;
失败,您的代码无法检测到它。使用:
if ( cin >> x )
{
// Reading to x was successful. Use it.
cout << x << endl;
}
else
{
// Reading to x was not successful. Figure out what to do.
}
作为一般原则,请检查每个IO调用的状态。准备在每次这样的呼叫后处理失败。在确认调用成功之前,请勿使用期望从IO操作获取的任何数据。从长远来看,这将为您节省很多心痛。