需要帮助了解cin缓冲行为

时间:2013-01-21 12:49:32

标签: c++

以下代码将输出显示为

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

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

强制它在第一个char之后忽略cin缓冲区

cin.ignore(1,'\n')

但它不应该只准备一个角色并忽略其余角色吗?

3 个答案:

答案 0 :(得分:0)

您的代码显示while (cin >> c) doStuff。那就是:只要有要读取的字符,doStuff。所以该计划正是这样做的。你的意思是if (cin >> c)吗?

答案 1 :(得分:0)

  

...但是它不应该只准备一个角色并忽略其余角色吗?

没有。它工作正常,我不知道你在哪里认为它应该忽略一些东西。它读取缓冲区中的任何内容,如果缓冲区为空,则阻塞等待更多输入。在你的情况下,它只在while循环的三次迭代后变空。

答案 2 :(得分:0)

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

程序也是如此。