初始代码请教,这个cin.ignore()如何起的作用呢?
以下几行代码,我想实现在键盘上敲什么字符,就在屏幕上显示什么字符,但是如果加上cin.ignore()后,结果就是不对的,总是显示我键入的第二个字符。我非常不解,1.为什么屏幕输出的总是第二个字符呢?第一个字符被cin.ignore()吃了不成。我用cin.ignore()的作用是清空键盘缓冲区呀,应该没有影响呀,我的思路是先清空缓冲区,再提取键盘录入的字符,这种思路有问题吗?
2.以下代码,我的理解是键入一个字符,则屏幕上会马上显示出来,但是好象不会,只有键入“回车”后,屏幕才会输出。
getchar()应该可以录入任何字符呀,所以回车符与其他可见的字符应该同等对待呀?难道我的理解还是错误的吗?请达人指教。
#include <iostream>
#include <stdlib.h>
using namespace std;
#include <conio.h>
int main()
{
cin.ignore();
cout << getchar();
cout << endl; system("pause");
return 0;
}

解决方案 »

  1.   

    第一个字符确实被cin.ignore()吃了
    cin.ignore()清空的缓冲区内容包括了你刚输入的数据
      

  2.   

    ignore()   函数像read()一样读字符,但它并不将读入的字符存放到任何地方(丢弃)。它也像read()一样能实际读n个字符(而不是n-1个)。有ignore()读入的字符的个数默认为1,所以,不用参数调用ignore()就意味着“丢掉下一个字符”。ignore()也可以用一个结束符,在读入中遇到这个结束符时,也将它从输入流中删除,ignore的默认结束符是文件结束。   
      

  3.   

    呵呵,没错,是被ignore()吃掉了,读虽然读了,但是不保存,自然更不会通过流输出