如何在终止前强行输入?

时间:2011-09-12 18:47:54

标签: c++

以下是我的代码的摘录,问题出在哪里。

    long long user_largest_plus;
    long long user_largest_minus;
    cout << "Input the largest+1 in decimal: " << endl;
    cin >> user_largest_plus;
//cout << endl;


   // cout << "Input the largest-1 in decimal: " << endl;
    cin >> user_largest_minus;
    cout << endl;

    cout << "In decimal plus: " << user_largest_plus;
    cout << endl;
    cout << "In decimal minus: " << user_largest_minus;

只要我输入9223372036854775808到user_largest_plus,执行就会终止。也就是说,我无法输入user_largest_minus。 我正在使用Code :: Blocks,MinGW编译器。

是因为我刚刚溢出变量,错误触发了此终止。有什么工作吗?

顺便说一下,这个数字是2^63 - 1,我可以存储的最大数量。

由于

2 个答案:

答案 0 :(得分:4)

尝试替换

cin >> user_largest_plus;

if( !( cin >> user_largest_plus ) ) {
    user_largest_plus = 0;
    cin.clear();
    cout << "Bad input. Using zero instead\n";
}

当输入文本不是有效long long时,会发生两件有趣的事情:

  • user_largest_plus永远不会设置,
  • bad位设置在cin

提供的代码将某些值设置为user_largest_plus以避免未定义的行为,并清除坏位,因此仍然可以使用cin

答案 1 :(得分:1)

假设这是因为输入的数字很大(并且当用户输入APPLE作为大小时防止错误,你应该这样做:

string user_largest_plus_string;
long long user_largest_plus;
cout << "Input the largest+1 in decimal: " << endl;
cin >> user_largest_plus_string;
user_largest_plus = atoi(user_largest_plus_string.c_str());
if (user_largest_plus == 0)
    throw std::runtime_error("User entered something besides a number!");
cout << "largest+1 is now " << user_largest_plus << "." << endl;