【问题标题】:why while loop do not need user to input in c++为什么while循环不需要用户在c++中输入
【发布时间】:2017-12-28 12:30:58
【问题描述】:

我正在学习 c++ 并阅读 c++ 入门加,但我不明白为什么这段代码需要两个“cin >> ch”。我知道第一个 cin 会读取用户输入的字符。但是我删除第一个“cin >> ch”并运行代码,程序没有错误。所以第一个 cin 是必要的吗?为什么第二个cin不需要用户输入?

#include <iostream>
int main()
{
    using namespace std;
    char ch;
    int count = 0;
    cout << "Enter characters; enter # to quit:\n";
    cin >> ch; //get a character
    while (ch != '#')
    {
        cout << ch;
        ++count;
        cin >> ch; // get the next character
    }
    cout << endl << count << " characters read\n";
    return 0;
}

【问题讨论】:

  • 如果第一个cin 不存在,请尝试思考ch != # 的含义。另外,当您运行该代码时,cout&lt;&lt;ch; 的结果是什么?
  • 没有第一个cin,第一次进入循环时ch的值是多少?

标签: c++


【解决方案1】:

您可以在while 循环的条件内评估您的输入。

#include <iostream>

int main()
{
    char ch;
    int count = 0;
    std::cout << "Enter characters; enter # to quit:\n";

    while (std::cin >> ch && ch != '#')
    {
        std::cout << "entered: " << ch << std::endl;
        ++count;
    }

    std::cout << std::endl << count << " characters read" << std::endl;

    return 0;
}

当输入while 条件时,它将等待您先输入任何内容。一旦收到输入,它将检查输入是否不是#。如果输入不是 # 进入循环,输入打印出来,计数器增加,然后返回等待另一个输入。如果输入#,则条件为假,循环被中止。

【讨论】:

    【解决方案2】:

    如果您删除第一个 cin,则 count 将永远不会增加。用户可以在进入循环之前输入#字符,因此程序永远无法进入。

    【讨论】:

    • 比这更糟糕。如果他们删除了第一个cin,那么ch 有一个未定义的值,并且该程序具有未定义的行为,因此尝试推理它的作用是没有意义的。
    【解决方案3】:

    第一个 cin>>ch 显然是用来接收用户的输入,但是你 再次使用相同的变量名“ch”在while循环中接受数据, 因此,当您运行程序时,它不会给您错误,而是只接受您在 while 循环之前接受的第一个值,而不是在 while 循环中。 在 while 循环中,您可以为变量“ch”分配新值,但不能再次接受新值。

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-16
      • 2020-02-15
      相关资源
      最近更新 更多