【问题标题】:why does 'Do while' loop act this way?为什么'Do while'循环会这样?
【发布时间】:2016-05-26 22:26:59
【问题描述】:

当我输入一些字符时,这个程序会打印一条消息。当我输入两个字符时,它会打印两次hello world,当输入aaaaa 时,会打印五个hello world 消息,依此类推!为什么?

int _tmain(int argc, _TCHAR* argv[])
{
    char nnn;
    do {
        cout << "hello world" << endl;
        cin >> nnn;
    } while ((nnn != 'y'));

    return 0;
}

结果如下:

hello world
d
hello world
ffff
hello world
hello world 
hello world
hello world
y

【问题讨论】:

  • 您希望发生什么?
  • 我预计它只会发布一句话。
  • 您确实输入了 5 个非 'y' 字符,代码为每个字符打印 hello world(在开头加上一个)。
  • 那么是否有另一个函数可以替换 'cin' 只读取整个输入而不是一个字符一个字符?
  • 不确定您是指整个单词还是整行。例如,请参阅 taking input of a string word by word,其中包含两者的示例。

标签: c++ input while-loop user-input


【解决方案1】:

因为您正在读取char,所以cin &gt;&gt; nnn; 每次迭代都会读取一个字符,即它仅因为循环而遍历ffff 中的所有f。当没有可读取的内容时,它会停止并等待您的进一步输入。

如果您想一次阅读整个单词/行,您应该使用operator&gt;&gt;/std::getline 和std::string。

【讨论】:

    【解决方案2】:

    如果您输入ffff,它会认为您输入了四次,并会打印四次“hello world”,因此请尝试更改 char ==> 字符串以避免此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2013-01-19
      相关资源
      最近更新 更多