我在运行下面的代码时遇到问题 我需要做的就是让用户输入一个整数,然后将其保存到我的cNumber变量中。
然后将从cNumber中减去zero
的ASCII值的值赋给变量iNumber,并在try / catch块中测试它,并将有效(0-9)整数乘以2的结果cout。
#include <iostream>
using namespace std;
// Declare variables
char cNumber;
int iNumber;
int main () {
// Begin infinite while loop
while (1) {
// Prompt user to enter aa number within th range of (0-9)
cout << "Please enter an number between 0 and 9: ";
//Get character from the keyboard and validate it as integer
//within the range (0-9)
try {
//Assign user input alue into cNumber variable
cin >> cNumber;
//Subtract ASCII value of zero from cNumber and assign to iNumber
iNumber = cNumber - 48;
if (iNumber < 0) {
throw string(cNumber + " is not within the range of (0-9)");
}
if (iNumber > 9) {
throw string(cNumber + " is not within the range of (0-9)");
}
}
catch (exception ex) {
cerr << cNumber + " is not a valid selection.... Input Error" << endl;
}
cout << "The result is " + iNumber * 2;
}
}
答案 0 :(得分:3)
目前还不清楚你在问什么,但我会对你的一些问题进行一些抨击。
表达式cNumber + " is not within the range of (0-9)"
是char
和char const*
之间的加法,无效。你可能不小心操纵指针地址。
可以将char
连接到字符串,但它必须是实际的std::string
对象。
所以:
throw cNumber + string(" is not within the range of (0-9)");
同样,您在代码中稍后会误导+
。
写:
cerr << cNumber << " is not a valid selection.... Input Error" << endl;
你也在抛出std::string
,但抓住了std::exception
。字符串不是来自异常。阅读C ++书中有关try / catch的章节。 (无论如何不建议投掷/捕捉字符串,也没有值得抓住。)
此外,如果输入不是数字,则提取到int
将失败...但您没有cin
流上的错误检查/重置。
对于代码的每一行,请看一下它的每个组成部分并问自己,“这是做什么的?为什么我写这个?”如果对于任何一段代码,您无法回答并证明这两个问题的答案,请停下来思考它是否正确。
答案 1 :(得分:2)
您正在抛出std::string
,但您的catch块被声明为具有std::exception
参数。
不知道这种不匹配是否是您问题的根源。
在任何情况下,都不建议抛出std::string
,因为这个类可以抛出异常,并且在处理前一个异常时抛出异常,大麻烦(突然终止)。
答案 2 :(得分:0)
对我来说似乎过于复杂,为什么不呢:
#include <iostream>
using namespace std;
int main ()
{
// Begin infinite while loop
while (1)
{
// Prompt user to enter aa number within th range of (0-9)
cout << "Please enter an number between 0 and 9: ";
// Get character from the keyboard and validate it as integer within the range (0-9)
// Assign user input value into cNumber variable
char cNumber;
cin >> cNumber;
// Subtract ASCII value of zero from cNumber and assign value to iNumber variable
int iNumber = cNumber - 48;
if (iNumber < 0 || iNumber > 9)
{
cerr << cNumber << " is not within the range of (0-9)" << endl;
}
else
{
cout << "The result is " + iNumber * 2;
}
}
}