2

在对 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;
}
4

3 回答 3

3

当您调用isdigit(num)时,num必须具有字符的 ASCII 值(0..255 或 EOF)。

如果它被定义为int numthencin >> num将把数字的整数值放入其中,而不是字母的 ASCII 值。

例如:

int num;
char c;
cin >> num; // input is "0"
cin >> c; // input is "0"

thenisdigit(num)为假(因为 ASCII 的第 0 位不是数字),但isdigit(c)为真(因为在 ASCII 的第 30 位有一个数字“0”)。

于 2011-06-30T00:06:53.737 回答
3

isdigit仅检查指定字符是否为数字。一个字符,不是两个,也不是一个整数,就像num定义的那样。您应该完全删除该检查,因为cin已经为您处理了验证。

http://www.cplusplus.com/reference/clibrary/cctype/isdigit/

于 2011-06-30T00:06:57.120 回答
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)

此处有更多详细信息: 忽略要选择的内容之外的用户输入

于 2011-06-30T00:46:08.123 回答