荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: MiYear (MiYear), 信区: Program
标  题: Re: 请问C++中的刷新输入缓冲区的函数
发信站: 荔园晨风BBS站 (Wed Sep 21 11:49:15 2005) , 站内信件

改为如下:
do
 {
       cout << "Please enter your request: ";
       cin >> request;
       cin.clear( );
       cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );  //事先
要在头文件中添加#include <limits>
 }
while ( request < 1 || request > 4 );

另外,fflush这个函数的功能,与编译器关系密切,从提高移植性考虑,最好不要用fflush
这个函数,虽然你一直用它没有出现过问题。


【 在 Dtan 的大作中提到: 】
: 不好意思,犯了一个严重错误,while中应用 逻辑或,而不应该用 逻辑与(如果用逻?..
: 的话,逻辑表达式的值永远是假,所以无论输入什么值都会结束while循环),更正如?..
: do    {
:       cout << "Please enter your request: ";
:       cin >> request;
:       //这里应该调用什么函数才能达到上面一样的效果呢?
:       } while ( request < 1 || request > 4 );
: 加上输出语句是为了让死循环的效果更明显。
: 还有cin.clear()只是设置goodbit,即设置状态位,并不会刷新输入缓冲区。下面是库..
: 数的一段代码
: void clear(iostate _St = goodbit, bool _Ex = false)
: {ios_base::clear(_Sb == 0 ? (int)_St | (int)badbit : (int)_St, _Ex); }
: 当期望输入一个整数而实际上却输入了一个字符时,goodbit会赋值为0,badbit赋值为..
: 运行时_Sb!=0,所以这样调用 ios_base::clear(4, false); 而ios_base::clear 函数?..
: 道在 VC6.0 库函数里是如何实现的,但从效果来看,即使在上面代码的cin>>request;..
: 句后加上cin.clear();也是会出现死循环,所以我觉得ios_base::clear 中并没有刷新..
: 入缓冲区。
: 结果是,在注释那里应该调用什么函数呢?
: 【 在 bakey (一日不见,如隔生抽) 的大作中提到: 】
: : 怎么我输入好像没有死循环呢....
: (以下引言省略...)

--

※ 来源:.荔园晨风BBS站 http://bbs.szu.edu.cn [FROM: 219.133.51.254]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店