C语言程序运行错误

输入英寸,换算成毫米输出的程序,键盘输入任意键继续,按N或n时退出。为什么程序不能正常运行,单步执行时在“scanf("%c",&c);”处不停顿程序如下:main(){... 输入英寸,换算成毫米输出的程序,键盘输入任意键继续,按N或n时退出。
为什么程序不能正常运行,单步执行时在“scanf("%c",&c);”处不停顿
程序如下:
main()
{
float a,b;
char c;
do
{
printf("qing shu ru a=?\n");
scanf("%f",&a);
b=a*25.4;
printf("%f\n",b);
printf("jie shu n/N");
scanf("%c",&c);
}
while(c!='n'||c!='N');
printf("zai jian xie xie!\n");
getche();
}
展开
 我来答
sky_sea_love
2011-12-02 · 超过52用户采纳过TA的回答
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:95.7万
展开全部
是这样,你的程序有两个问题:
1. 逻辑关系错误:如jaybestwang同学所说,while内的逻辑是始终成立的,c不等于'n'就肯定等于'N'嘛,所以改成while(c!='n'&&c!='N') ;
2. 程序设计缺陷:如deng576631589同学所说,scanf函数会把缓冲区的回车符也载入,因此第二个scanf函数实际上接收的是你第一次输入数据的最后一个(非数值)。解决思想就是把这个值给“消耗”掉,比如在第一个scanf后面紧跟一个getchar函数。

其实这些问题通过调试都能找出来,你需要一些调试技巧。断点分析到while不起作用了,就应该主动从逻辑上分析为什么,而不是问程序为什么,程序是按你的指令在执行的,不会有问题。
希望能对你有所启发,祝你学习愉快。

附参考修改如下:
void main()
{
float a,b;
char c;
do
{
printf("\nqing shu ru a=?\n");
scanf("%f",&a);
getchar();//消耗掉你输入的回车键
b=a*25.4;
printf("%f\n",b);
printf("jie shu n/N\n");
c=getchar();//我用getchar函数代替scanf,这里应该还是有区别的
// scanf("%c",&c);
}
while(c!='n'&&c!='N');
printf("zai jian xie xie!\n");
getchar();
}
furious_tauren
2011-12-02 · TA获得超过4056个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:775万
展开全部
main()
{
float a,b;
char c;
do
{
printf("qing shu ru a=?\n");
scanf("%f",&a);
b=a*25.4;
printf("%f\n",b);
printf("jie shu n/N");
getchar(); // 加这句, 消去你输入a时按下enter建产生的'\n'字符
scanf("%c",&c);
}
while(c!='n'&& c!='N'); // || 改成 &&
printf("zai jian xie xie!\n");
getchar();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
戏雨南s8
2011-12-02 · TA获得超过504个赞
知道小有建树答主
回答量:376
采纳率:0%
帮助的人:292万
展开全部
我看是scanf("%c",&c);话吃了回车那个字符。所以不停.....
main()
{
float a,b;
char c,d;
do
{
printf("qing shu ru a=?\n");
scanf("%f",&a);
b=a*25.4;
printf("%f\n",b);
printf("jie shu n/N");
scanf("%c",&d);
scanf("%c",&c);
}
while(c!='n'&&c!='N');
printf("zai jian xie xie!\n");
getche();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1239388231
2011-12-02 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:136
采纳率:0%
帮助的人:104万
展开全部
main()
{
float a,b;
char c;
do
{
printf("qing shu ru a=?\n");
scanf("%f",&a);
b=a*25.4;
printf("%f\n",b);
printf("jie shu n/N");
scanf("%c",&c);
}
while(c!='n'&&c!='N');
printf("zai jian xie xie!\n");
getche();
}
将“||”改为“&&”,因为c='n'或c=‘N’的逆否命题是c!='n'并且c!='N'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaybestwang
2011-12-02 · TA获得超过4106个赞
知道小有建树答主
回答量:940
采纳率:0%
帮助的人:711万
展开全部
while终止条件有问题,c无论如何输入都会继续循环,应该改成
while(c!='n'&&c!='N')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
码农茂奇
2011-12-02 · 超过10用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:24.7万
展开全部
while(c!='n'&&c!='N'); ///&&吧,不是|| , c!='n'||c!='N' 是恒TRUE.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式