2

下面的代码将输出显示为

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')

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

4

3 回答 3

1

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

不。它工作正常,我不知道你从哪里得到它应该忽略某些东西的想法。它读取缓冲区中的任何内容,并在缓冲区为空时阻止等待更多输入。在您的情况下,它仅在 while 循环的三次迭代后才变为空。

于 2013-01-21T13:14:46.410 回答
0

你的代码说while (cin >> c) doStuff。即:只要有要读取的字符,doStuff。所以程序正是这样做的。你也许是说if (cin >> c)

于 2013-01-21T12:56:44.173 回答
0

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

程序的行为也是如此。

于 2013-01-21T13:15:34.803 回答