我试图直接从命令行输入文件后使用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后输入所有81个数字(不使用< myfile
输入),如果我这样做,程序将继续输入并永不停止或打印。
我不知道我遇到了什么......?
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操作获得的任何数据。从长远来看,这将为您节省很多心痛。