【问题标题】:cin fails to stop while loopcin 无法停止 while 循环
【发布时间】:2014-02-17 23:11:35
【问题描述】:

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

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;
}

非常感谢。

【问题讨论】:

  • 你是如何声明value的?
  • 价值声明编辑
  • “isdigit”有什么作用?
  • isdigit 检查传递的值是否是一个数字,而不是别的。在cplusplus上搜索
  • 如果你为value输入了一个非数字字符,它被认为是一个失败的输入操作。该字符提取到value

标签: c++ loops while-loop


【解决方案1】:

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

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

另一个(更干净的)选项是只测试cin 的状态,正如 @bennofs 指出的那样:

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

【讨论】:

  • 或者直接使用std::cin &gt;&gt; value的结果
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2021-03-04
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多