需要帮助理解cin缓冲区的行为

need help understanding cin buffer behavior

本文关键字:缓冲区 cin 帮助 助理      更新时间:2023-10-16

下面的代码显示了

的输出
enter something
abc
you entered: a
you entered: b
you entered: c
  #include "stdafx.h"
    #include <iostream>
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    char c;
    while(cin>>c)
    {
    //Do something  
        cout<<"you entered: "<<c<<"n";
    }

    return 0;
    }

为什么不显示输入的第一个字符?我知道我可以使用

强制它忽略第一个字符后面的cin缓冲区

cin.ignore(1,'n')

但是它不应该只准备一个字符而忽略其余的吗?

…但是它不应该只准备一个字符而忽略其他字符吗?

。它工作正常,我不知道你从哪里得到的想法,它应该忽略一些东西。它读取缓冲区中的所有内容,并在缓冲区为空时阻塞等待更多输入。在您的示例中,它仅在while循环的三次迭代之后变为空。

您的代码显示为while (cin >> c) doStuff。也就是说:只要有文字要读,就做东西。这个程序就是这么做的。你是说if (cin >> c)吗?

cin只能在按下RETURN键后处理来自键盘的输入。while循环继续执行该操作,直到依次打印cin缓冲区中的所有字符。

程序的行为