以下是我的代码的摘录,问题出在哪里。
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
,我可以存储的最大数量。
由于
答案 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;