我想创建一个使用10个正整数并为用户提供总数的c ++ 11程序。如果输入的是负数或字符,则应引发异常,并且用户必须重新输入其值。
下面的程序使用负数。但是,当我输入“ a”这样的字符时,程序进入无限循环,我无法弄清原因。
任何人和所有帮助将不胜感激
#include <iostream>
int main(){
int array[10] = {0};
int total = 0;
for(int i =0; i < 10; i++){
std::cout<<"Number "<< i+1 << ": " <<std::endl;
std::cin >> array[i];
try{
if(array[i] < 0 || std::cin.fail())
throw(array[i]);
}
catch(int a){
std::cout<< a <<" is not a positive number! "<<std::endl;
i-=1; // to go back to the previous position in array
}
}
for(int k = 0; k < 10; k++)
total+=array[k];
std::cout<<"Total: " <<total<<std::endl;
}
答案 0 :(得分:0)
如果输入无效,则需要做两件事:
对于您的程序,这里不需要例外,只需使用 unsigned 整数并检查状态就足够了:
unsigned int array[10] = { 0 };
...
if (!(std::cin >> array[i])
{
std::cout << "Please input only non-negative integers.\n";
// First clear the stream status
std::cin.clear();
// Then skip the bad input
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Make sure the index isn't increased
--i;
}
要使用与您现在相似的异常,解决方案与上面的几乎完全相同:
unsigned int array[10] = { 0 };
...
if (!(std::cin >> array[i])
{
throw i;
}
catch (int current_index)
{
std::cout << "The input for number " << current_index + 1 << " was incorrect.\n";
std::cout << "Please input only non-negative integers.\n";
// First clear the stream status
std::cin.clear();
// Then skip the bad input
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Make sure the index isn't increased
--i;
}
答案 1 :(得分:0)
在代码中使用以下行时,不要忘记包含限制标头文件:
std :: cin.ignore(std :: numeric_limits :: max(),'\ n');
因为在此头文件中定义了numeric_limits模板!