循环时cin无法停止

时间:2014-02-17 23:11:36

标签: c++ loops while-loop

我想知道你们是否可以向我解释为什么如果我输入'r'代表'value'的值,这个循环不会循环。

double value

std::cout << "Please enter a real number: ";
std::cin  >> value;

while (!isdigit(value))
{
    std::cout << "Sorry, but only numbers are valid.\nPlease enter a real number: ";
    std::cin  >> value;
}

非常感谢。

2 个答案:

答案 0 :(得分:2)

你不应该在这里使用isdigit(),因为这是用于测试单个char类型是否为ASCII数字。

如果您希望用户输入实数(而不是字符串),则应使用cin.fail()作为循环测试条件。如果cin在预期double时读取字符串,则cin.fail()将返回true

另一个(更干净)的选择就是测试cin的状态为 @bennofs 指出:

while (!(std::cin >> value))
{
    // bad value was entered
}

答案 1 :(得分:1)

您做错了两件事:您将value声明为double,并使用std::cin >> value填充了错误声明的变量。

你需要读一个角色,所以读一个角色。将value声明为char

编辑:我假设您的作业是读取一个字符并查看它是否代表其中一个数字。如果你的任务是阅读一个数字,那你就错了。