【发布时间】:2018-07-16 09:19:09
【问题描述】:
我想创建一个 c++11 程序,它接受 10 个正整数并为用户提供总数。如果输入负数或字符,则应抛出异常,用户必须重新输入其值。
下面的程序适用于负数。但是,当我输入像“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;
}
【问题讨论】:
-
当你输入一个字符而不是数字时,会到达捕获线吗?
-
是的,错误信息被打印出来,但它是一个无限循环。如果输入数字,程序将按预期运行。
-
程序在输入字母时进入无限循环,因为
cin >> array[i]在遇到字母时停止,不会更改array[i],导致cin.fail()返回true,并离开下次循环读取流缓冲区中的字母。尝试将数据读取为std::string,解析该字符串以确定是否输入了整数值,并丢弃其他任何内容(如字母)。异常的使用与问题无关。另外:抛出异常是不必要的,因为你在抛出异常的函数中捕获异常。