09年3月的一道二级C试题,请教各位...

来源:百度知道 编辑:UC知道 时间:2024/05/26 19:36:14
(8)有以下程序
#include <stdio,h>
main()
{char c1, c2;
scanf(“%c”,&c1);
while(c1<65||c1>90) scanf(“%c”,&c1);
c2=c1+32;
printf(“%c, %c\n”,c1, c2);
}
程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)【8】。
鄙人认为 :虽然while条件不满足,顶多是while语句后的scanf(“%c”,&c1);不再执行了,但是依然要执行下一条语句 c2=c1+32; c1已经赋初值65
所以c2 也应该有结果的。
请教各位高人,为啥答案是“不能”输出结果???谢谢

“虽然while条件不满足,顶多是while语句后的scanf(“%c”,&c1);不再执行了,但是依然要执行下一条语句 c2=c1+32; c1已经赋初值65
所以c2 也应该有结果的。”
上面是你自己的观点,现在我说说我的观点,呵呵 ~
你关键的错误就在:你以为c1已经被赋值为65,然而你输入的65,到了程序里他不认为是数值65,而是把6当做字符传给了c1,实际上c1存的是字符‘6',字符‘6’的ASCII值是54(这是十进制的54,如果是十六进制就是36啦),当然54<65,所以就继续循环了,而到了输入的‘5’,和上面同样的原因,会继续循环,如果这时候你不再输入,那么自然就不会有结果,因为程序一直这样停在这儿等你输入呢。

你要注意,这里scanf(“%c”,&c1)是用%c来当参数的,也就是说65是当做字符往里传的,c1只被赋值为字符'6',而不是65,‘6’的asii值小于65,进入循环,scanf要求输入一个字符,把‘5’就输入了,而‘5’仍然小于65,所以还会循环的,并不会输出结果

主要是他是以字符串%c形式输入的 所以 你65回车后 6会先存进c1中 进入while循环 6的ASCII码肯定没有65大 所以就执行 scanf(“%c”,&c1);这时你输入的5又进去了 5 也没有65大 再执行scanf(“%c”,&c1); 这时回车将会被输入进去 回车的ASCII码是10 还是没有65大 所以又提示输入
必须输入大写字母才可以

c1,c2被定义为字符类型,当输入65时是以字符形式读入,只能读到字符6,6的ASCII码值是54,满足while(c1<65||c2>90),所以执行scanf("%c",&c1),即不能输出结果。

你这个首先输入65就有错误了,当你输入65的时候其实读进来的是字符‘6’,而你的本意是想读入‘A’,所以达不到你想要的结果

scanf("%c",&c1);
输入65的时候这一句只把6当做字符赋给c1
因为%c只接收了一个字符
所以c1此时用%c输出时是6,%d输出时是54也就是6的ASCII码值