标题:在C++中怎么清空缓冲区? 还可以用fflush吗?
只看楼主
jiang520
Rank: 1
等 级:新手上路
帖 子:207
专家分:0
注 册:2006-9-13
 问题点数:0 回复次数:9 
在C++中怎么清空缓冲区? 还可以用fflush吗?

大家帮我把这个弄下哈... (完全自学,一点小问题也得请教大家,米办法啊...)

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a,b,c,p,q,temp,x1,x2;
char mm;
cout<<" 下面是求解任意一元二次方程的实根!"<<endl;
cout<<"注意:分别输入的是a,b,c对应的值,且要满足(b*b-4*a*c)>=0,即有实数根!"<<endl<<endl;
cout<<"请输入一元二次方程的a,b,c的值:"<<endl;

do{
while(1)
{
cin>>a>>b>>c;
temp=b*b-4*a*c;
if(temp>=0)
{
p=(-b)/(2*a);q=(sqrt(temp))/(2*a);
x1=p+q;x2=p-q;
cout<<"你所求的一元二次方程的实数根x1,x2如下:"<<endl;
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;
break;
}
else cout<<"你输入的数构成的一元二次方程无实根,请重新输入:"<<endl;
}
cout<<endl<<"是否继续:y/n?";
fflush; //这里要怎么设置了啊? 或者还是用其它什么语句或函数?
}
while(mm=='y');

return 0;
}

搜索更多相关主题的帖子: fflush 缓冲区 
2006-11-10 11:09
jiang520
Rank: 1
等 级:新手上路
帖 子:207
专家分:0
注 册:2006-9-13
得分:0 
这个意思吧:

在C中我都用 fflush(stdin) 就可以噻,但在C++中却不能这么用了,不知道为什么?

努力,努力吧,未来的天空,那一片湛蓝总会属于我的~
2006-11-10 11:20
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
得分:0 
一般情况用不到fflush,可以把fflush一句改成cin>>mm;

我把程序改了一下,把cout<<"请输入一元二次方程的a,b,c的值:"<<endl;一句放到了循环里面,否则输入y后没有提示信息,让人不知道程序想干什么

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a,b,c,p,q,temp,x1,x2;
char mm;
cout<<" 下面是求解任意一元二次方程的实根!"<<endl;
cout<<"注意:分别输入的是a,b,c对应的值,且要满足(b*b-4*a*c)>=0,即有实数根!"<<endl<<endl;

do{
while(1)
{
cout<<"请输入一元二次方程的a,b,c的值:"<<endl;
cin>>a>>b>>c;
temp=b*b-4*a*c;
if(temp>=0)
{
p=(-b)/(2*a);q=(sqrt(temp))/(2*a);
x1=p+q;x2=p-q;
cout<<"你所求的一元二次方程的实数根x1,x2如下:"<<endl;
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;
break;
}
else cout<<"你输入的数构成的一元二次方程无实根,请重新输入:"<<endl;
}
cout<<endl<<"是否继续:y/n?";
cin>>mm; //这里要怎么设置了啊? 或者还是用其它什么语句或函数?
}while(mm=='y');

return 0;
}

2006-11-10 11:31
jiang520
Rank: 1
等 级:新手上路
帖 子:207
专家分:0
注 册:2006-9-13
得分:0 
这样很行,但还有一点:

当输入的数不能满足条件时,也就是还没有运行过结果时,

它有提示为:

你输入的数构成的一元二次方程无实根,请重新输入:
请输入一元二次方程的a,b,c的值:

这样紧挨着的,我要的是:

你输入的数构成的一元二次方程无实根,请重新输入:

这一句就够了,此时啊....

努力,努力吧,未来的天空,那一片湛蓝总会属于我的~
2006-11-10 12:05
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
得分:0 
我觉得这样没什么问题,
我本来不想把程序结构变动太大,如果你觉得提示不好的话,可以把do循环改成下面代码

do{
cout<<"请输入一元二次方程的a,b,c的值:"<<endl;
cin>>a>>b>>c;
while((temp=b*b-4*a*c)<0)
{
cout<<"你输入的数构成的一元二次方程无实根,请重新输入:"<<endl;
cin>>a>>b>>c;
}

p=(-b)/(2*a);q=(sqrt(temp))/(2*a);
x1=p+q;x2=p-q;
cout<<"你所求的一元二次方程的实数根x1,x2如下:"<<endl;
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;

cout<<"\n是否继续:y/n?";
cin>>mm;
}while(mm=='y');


这样比你原来的程序结构好多了(没了while(1),没了break).你觉得呢

2006-11-10 12:21
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
得分:0 
我觉得这样没什么问题,
我本来不想把程序结构变动太大,如果你觉得提示不好的话,可以把do循环改成下面代码

do{
cout<<"请输入一元二次方程的a,b,c的值:"<<endl;
cin>>a>>b>>c;
while((temp=b*b-4*a*c)<0)
{
cout<<"你输入的数构成的一元二次方程无实根,请重新输入:"<<endl;
cin>>a>>b>>c;
}

p=(-b)/(2*a);q=(sqrt(temp))/(2*a);
x1=p+q;x2=p-q;
cout<<"你所求的一元二次方程的实数根x1,x2如下:"<<endl;
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;

cout<<"\n是否继续:y/n?";
cin>>mm;
}while(mm=='y');


这样比你原来的程序结构好多了(没了while(1),没了break).你觉得呢

2006-11-10 12:22
jiang520
Rank: 1
等 级:新手上路
帖 子:207
专家分:0
注 册:2006-9-13
得分:0 

不错,真的很谢谢你...

这其实就是一个while语句的灵活应用罢了,我用它用得很少,因为自学,也没学多久,刚学while时也就用过几次

后就没怎么使用了...呵呵!

本来只是想知道清空缓冲那就可以了,这纯属个人脑袋问题呵呵.


努力,努力吧,未来的天空,那一片湛蓝总会属于我的~
2006-11-10 14:09
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 
cin.ignore(100,'');清除缓

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-10 16:45
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
得分:0 
cin.sync()
清缓冲!
2006-11-10 20:48
jiang520
Rank: 1
等 级:新手上路
帖 子:207
专家分:0
注 册:2006-9-13
得分:0 
以下是引用song4在2006-11-10 16:45:02的发言:
cin.ignore(100,'');清除缓

cin.ignore()是不会用读字符的,这个方法用于将cin对象中缓冲区的部份字符丢弃,缺省状态是丢一个字符. 说白了就是把你从键盘中读入的东东丢掉最后一个.

是这样吧?

cin.sync(); //危险!可能会丢失数据! 不明白


努力,努力吧,未来的天空,那一片湛蓝总会属于我的~
2006-11-11 08:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-101961-1-1.html




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

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