对int num使用布尔检查时,此循环不起作用。它后面的行无法识别。输入和整数,如60,它只是关闭。我使用isdigit错了吗?
int main()
{
int num;
int loop = -1;
while (loop ==-1)
{
cin >> num;
int ctemp = (num-32) * 5 / 9;
int ftemp = num*9/5 + 32;
if (!isdigit(num)) {
exit(0); // if user enters decimals or letters program closes
}
cout << num << "°F = " << ctemp << "°C" << endl;
cout << num << "°C = " << ftemp << "°F" << endl;
if (num == 1) {
cout << "this is a seperate condition";
} else {
continue; //must not end loop
}
loop = -1;
}
return 0;
}
答案 0 :(得分:3)
当您致电isdigit(num)
时,num
必须具有字符的ASCII值(0..255或EOF)。
如果它被定义为int num
,那么cin >> num
将把数字的整数值放入其中,而不是字母的ASCII值。
例如:
int num;
char c;
cin >> num; // input is "0"
cin >> c; // input is "0"
然后isdigit(num)
为假(因为ASCII的第0位不是数字),但isdigit(c)
为真(因为在ASCII的第30位有一个数字'0')。
答案 1 :(得分:3)
isdigit
仅检查指定的字符是否为数字。一个字符,而不是两个,而不是整数,因为num
似乎被定义为。您应该完全删除该检查,因为cin
已经为您处理了验证。
答案 2 :(得分:2)
如果你试图保护自己免受无效输入(范围之外,非数字等)的影响,有几个问题需要担心:
// user types "foo" and then "bar" when prompted for input
int num;
std::cin >> num; // nothing is extracted from cin, because "foo" is not a number
std::string str;
std::cint >> str; // extracts "foo" -- not "bar", (the previous extraction failed)
这里有更多细节: Ignore user input outside of what's to be chosen from