新手请教?

欧阳春晖 2012-01-27 07:01:54
#include<stdio.h>
void main()
{
float a,b=0,n;
char d;
while(1)
{
n++;
printf("one number:\n");
scanf("%f",&a);
b=b+a;
printf("是(Y)否(N)退出?\n");
scanf("%c",&d);
if(d=='Y')
{
b=b/n;
break;
}
else
{
if(d=='N')
{
;
}
}
}
printf("平均值:%f\n",b);
}
以上是程序代码,按理说应按如下方式互交:
one number:
1
是(Y)否(N)退出?
N
one number:
1
是(Y)否(N)退出?
N
one number:
1
是(Y)否(N)退出?
N
one number:
1
是(Y)否(N)退出?
Y
平均值:1.0
但运行时却跳过了if语句,为什么?
...全文
133 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
欧阳春晖 2012-01-27
  • 打赏
  • 举报
回复
谢谢大家,是过以后,确实如此。
程序如下:
#include<stdio.h>
void main()
{
float a,b=0,c;
int n=0;
char d;
while(1)
{
printf("one number:\n");
scanf("%f",&a);
fflush(stdin);
if(a>0)
{
n++;
b=b+a;
c=b/n;
}
printf("是(Y)否(N)退出?\n");
scanf("%c",&d);
if(d=='Y')
{
printf("n值为%d\n",n);
printf("合计:%f\n",b);
printf("平均值:%f\n",c);
break;
}
else if(d=='N')
{
;
}
}
}
qualcode 2012-01-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sagegz 的回复:]

n都没定义就++?这么不标准的编译器?
不说这个,关于为什么会直接跳过if,是因为你输入1后,还会输入一个回车。而scanf("%f",a)只会才输入流中读取1,还有\n留在缓冲区中。则下一次scanf("%c",&d)直接读取\n.所以显示 是(Y)否(N)退出?后
直接匹配else.开始下一次循环。所以这样是个死循环。
[/Quote]

可以使用函数fflush(stdin)把缓冲区的\n回车符号去掉,就OK了
sagegz 2012-01-27
  • 打赏
  • 举报
回复
n都没定义就++?这么不标准的编译器?
不说这个,关于为什么会直接跳过if,是因为你输入1后,还会输入一个回车。而scanf("%f",a)只会才输入流中读取1,还有\n留在缓冲区中。则下一次scanf("%c",&d)直接读取\n.所以显示 是(Y)否(N)退出?后
直接匹配else.开始下一次循环。所以这样是个死循环。
i945800687 2012-01-27
  • 打赏
  • 举报
回复

if(d=='Y')
{
b=b/n;
break;
}


你把break去掉
while(1)这里面再想个条件,不要用1来确认,容易出错
欧阳春晖 2012-01-27
  • 打赏
  • 举报
回复
不是。
redillosion 2012-01-27
  • 打赏
  • 举报
回复
是不是输入大小写不对

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧