| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4101 人关注过本帖
标题:初始代码请教,这个cin.ignore()如何起的作用呢?
只看楼主 加入收藏
ggyy66
Rank: 1
等 级:新手上路
帖 子:427
专家分:0
注 册:2007-8-14
结帖率:86.25%
收藏
已结贴  问题点数:20 回复次数:3 
初始代码请教,这个cin.ignore()如何起的作用呢?
初始代码请教,这个cin.ignore()如何起的作用呢?
以下几行代码,我想实现在键盘上敲什么字符,就在屏幕上显示什么字符,但是如果加上cin.ignore()后,结果就是不对的,总是显示我键入的第二个字符。我非常不解,
1.为什么屏幕输出的总是第二个字符呢?第一个字符被cin.ignore()吃了不成。我用cin.ignore()的作用是清空键盘缓冲区呀,应该没有影响呀,我的思路是先清空缓冲区,再提取键盘录入的字符,这种思路有问题吗?
2.以下代码,我的理解是键入一个字符,则屏幕上会马上显示出来,但是好象不会,只有键入“回车”后,屏幕才会输出。
getchar()应该可以录入任何字符呀,所以回车符与其他可见的字符应该同等对待呀?难道我的理解还是错误的吗?
请达人指教。
[code=C/C++]
#include <iostream>
#include <stdlib.h>
using namespace std;
#include <conio.h>
int main()
{
    cin.ignore();
    cout << getchar();
    cout << endl;
    system("pause");
    return 0;
}
[/code]
搜索更多相关主题的帖子: cin 代码 ignore 
2009-09-06 17:45
forclwy
Rank: 4
等 级:业余侠客
帖 子:167
专家分:255
注 册:2008-10-21
收藏
得分:10 
cin.ignore不给参数默认时,cin.ignore(1,EOF)即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。
2009-09-06 20:07
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:10 
cin.ignore();就是去掉输入流里的第一个字符。
看一段程序:
#include <iostream>
using namespace std;
int main()
{
    cin.ignore();  //去掉stdin(输入流)中第一个字符,如果输入abc
    cout <<stdin->_ptr; //输出stdin中所有的字符,结果:'b''c'
    return 0;
}
所以如果你要清空缓冲区,放在开头是错误的。因为开头输入流一点东西也没有,没必要清空的。
要清空缓冲区,肯定要输入后。
看第二段程序:
#include <iostream>
using namespace std;
int main()
{
    char a;      
    cin>>a;         //如果输入abc ,则stdin(输入流)中第一个字符'a'被赋予a。
    cin.ignore();  //去掉stdin(输入流)中第一个字符,则输入流为'c ','b'被去掉了。
    cout <<stdin->_ptr; //输出stdin中所有的字符,结果:'c'
    return 0;
}
所以要清空输入流,必须知道输入流里的数据大小,有几个就去几个,在把这个参数给ignore。
2种较好的方法:
1.cin.ignore(numeric_limits<std::streamsize>::max(),'\n');
2.cin.ignore(cin.rdbuf()->in_avail())
最后屏幕输不输出在于stdin(输入流),和你打击键盘无关,输入语句在输入流里非空时都是把输入流里的东西输出到屏幕,是不会让你输入的,只有空的时候才允许你打键盘输入。
比如净水器里有水是不能再加水的,但是没水了,你就可以加水了。

2009-09-06 21:30
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
至于你想捕捉键盘,只相应你输入的一个字符,你可以查看我以前的回答:
https://bbs.bccn.net/viewthread.php?tid=284302&page=1#pid1656695
2009-09-06 21:37
快速回复:初始代码请教,这个cin.ignore()如何起的作用呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020951 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved