谢谢楼上!明白3楼的逻辑错误的意思了~谢谢大家~学习的路上有你们陪!很高兴!
看了楼上的解答,一直有一个问题没有想明白,那就是两个getchar();是干嘛的,是否多余。
后来上机证明没有两个getchar()确实不行。想了很久没有想明白为什么。
晚上查阅了谭浩强的书,终于明白了两个getchar()的用处。
可能高手们觉得这根本没什么,但是对于新手来说,这个问题如果没人解释,很久都不会懂,跟大家分享一下。
xu362726904大人的程序:
------------------------------------------------
#include"stdio.h"
main()
{
char a,b;
on :
scanf ("%c",&a);
getchar();
printf ("ascII码为:%d",a);
printf ("是否继续?");
scanf ("%c",&b);
getchar();
if (b=='y') goto on;
else goto off;
off :
;
}
--------------------------------------------------
由于没理解getchar()的用处,我第一次改过来的程序为:
-------------------------------------------------
#include"stdio.h"
main()
{
char a,b;
on :
printf ("输入字母:");
scanf ("%c",&a);
printf ("ascII码为:%d",a);
printf ("是否继续?");
scanf ("%c",&b);
if (b=='y') goto on;
else goto off;
off :
;
}
-------------------------------------------------
运行,
输入字母:a(回车)
ascII码为:97
是否继续?输入字母:a(回车)
ascII码为:10
是否继续?输入字母:
-------------------------------------------------
问题出现了。没有让输入是否继续就直接goto on;了。。。
加上了getchar()之后,问题解决。程序正常。
查阅了谭老的书之后明白了原因。
scanf ("%c",&a);
开始输入,a(回车)
于是“a”分配给变量a
程序执行到第二个scanf ("%c",&b);
(回车)分配给变量b,(回车)的ascII码为10,在c语言中,char的变量的字符是以0-255的值存在变量里的,所以才能%d%c互用,显然,b!='y',所以goto on;
再次执行scanf ("%c",&a);
于是程序死循环。。。
于是需要加上getchar()“吃掉”回车。
希望对新手有用~反正我是学到了不少东西。
最后用谭老的话总结:
“一个函数中如果有几个scanf函数,再输入数据时往往会出现一些想象不到的情况,其中一个重要原因就是由回车符引起的,c语言很灵活,书上不可能把一切细节都讲到,读者在遇到类似情况时,上机多试验一下就可以找出规律来。”----------《c程序设计题解与上机指导(第二版)》谭浩强。
----------------------------------
谢谢论坛,给我们这些自学的人找到了良师益友。
我的【自学菜鸟】会持续更新,望各位大侠不要吝惜赐教!
再次拜谢。
[
本帖最后由 s158298261 于 2009-12-29 09:32 编辑 ]