【问题标题】:std::cin only runs once in while loop? [duplicate]std::cin 只在 while 循环中运行一次? [复制]
【发布时间】:2020-12-03 15:48:17
【问题描述】:

如果这个问题很愚蠢,我很抱歉,但这有点困扰我。我编写了一个程序,它应该接受用户输入 5 次,然后每次都打印出结果(我正在使用 while 循环。)这是我编写的代码:

#include <iostream>

int main()
{
    int x = 1;
    int number;

    while (x <= 5)
    {
        std::cin >> number;
        std::cout << number << std::endl;
        x++;
    }

    return 0;
}

但是,在编译和运行之后(我使用的是 clang),该程序只允许我插入用户输入一次,然后它只打印一堆 0:

jakdfjaksdfjk
0
0
0
0
0

我真的很困惑为什么会发生这种行为。您不应该能够将用户输入传递 5 次吗?为什么会发生这种行为?非常感谢您的帮助。

【问题讨论】:

  • jakdfjaksdfjk 不是 int,这是您要读取的类型。
  • 相关/重复:How to handle wrong data type input(但我找不到任何与“为什么跳过输入”完全相同的问题)
  • 哦...我真的忽略了-
  • 是的!谢谢。

标签: c++ while-loop


【解决方案1】:

您正在尝试读取一个整数,而“jakdfjaksdfjk”将是一个字符串,这就是发生这种情况的原因。输入类似 1 4 8 35 42 的内容,它会按您的预期工作

【讨论】:

  • 实际问题是程序无法正确处理无效输入。一个好的程序会处理任何输入,无论好坏,并相应地进行处理,而不是陷入无限循环。
【解决方案2】:

你应该考虑检查std::cin的验证:

#include <iostream>

int main(void) {
    int x = 1;
    int number;

    while (x++ <= 5) {
        std::cin >> number;

        // If the input isn't an integer, the breaks the loop and quit
        if (!std::cin.good()) {
            std::cout << "Numbers only please.\n";
            break;
        }

        // Otherwise, simply print...
        std::cout << number << std::endl;
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多