【发布时间】:2011-11-21 09:16:57
【问题描述】:
在来自 stackoverflow 的好心人的帮助下,当用户的输入不是整数时,我已经完成了以下代码来捕获异常:
signed int num;
while(true)
{
cin >> num;
try{
if(cin.fail()){
throw "error";
}
if(num>0){
cout<<"number greater than 0"<<endl;
}
}
catch( char* error){
cout<<error<<endl;
break;
}
}
现在假设程序被调用:checkint。如果我通过重定向文本文件中的输入来调用程序,比如说:input.txt,它具有以下内容: 12 5 12 0 3 2 0
checkint <input.txt
输出: 我得到以下输出:
number greater than 0
number greater than 0
number greater than 0
number greater than 0
number greater than 0
error
当文件中的所有输入都是整数时,为什么最后会抛出错误? 谢谢
【问题讨论】:
-
请注意
"error"是char[6]的右值,它将绑定到const char[6]和const char*,但IMO 不应绑定到char*。 (IOW,您的异常不会被捕获。) -
使用异常处理格式错误的用户输入对我来说听起来像是滥用;我建议宁愿阅读
std::string,然后使用bool isInteger( const std::string &s )之类的函数来根据您的格式要求验证给定的输入确实是一个整数。 -
扔不是来自
std::exception的东西也是一种糟糕的形式。