新手C语言求助一道题。

输入12345#后,写出下列程序的输出结果。
void main()
{ char c;
for(c=getchar(); getchar()!=’#’; c=getchar())
putchar(c);
}

for(c=getchar(); getchar()!=’#’; c=getchar())

 

输入12345#后,首先进入for循环要执行第一个c=getchar()给c赋初始值,即为第一个字符'1',c=‘1’,而后进行第二个表达式getchar()!='#'的判断,此时getchar()得到的字符是'2'满足条件但没给c赋值,c还是等于'1',后执行putchar(c),后执行下一次循环,先执行第三个表达式c=getchar(),给c赋值,此时c='3',然后再进行第二个表达式getchar()!='#'的判断,此时getchar()得到的是'4',满足循环执行条件执行putchar(c),后再执行第三个表达式c=getchar(),此时c='5', 再执行第二个表达式getchar()!='#',这时的getchar()已经为'#'号,所以不满足循环执行条件了,不再执行putchar(c),尽管此时c中的值是'5'也不会输出了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-06
确实是13 第一次for c=1,这个没问题,判断条件从缓冲区中取2,判断后丢弃,然后输出c=1
c再从缓冲区中取c=3 第一次for结束
第二次 取4判断然后丢弃 输出C=3 再从缓冲区中取c=5 第二次结束
第三次 取#判断 for结束
所以输出13
over
第2个回答  2013-01-06
135
getchar每次只接收一个字符,放在缓存中。如果再用getchar接收一次,原来的就会被覆盖掉。
for(c=getchar(); getchar()!=’#’; c=getchar())我们把第一个c=getchar()称为1getchar,第二个c=getchar()称为2getchar。

第一次进入循环,1getchar接收1,然后判断,getchar()!=’#’成立,然后进入循环,输出c;然后再进行2getchar,接收2,然后再判断getchar()!=’#’成立,然后继续1getchar,接收3,判断getchar()!=’#’成立,输出3;然后再进行2getchar,接收4,然后再判断getchar()!=’#’成立,然后继续1getchar,接收5,然后再判断getchar()!=’#’成立,输出5,然后再进行2getchar,接收#,判断getchar()!=’#不成立,循环结束!
够详细了吧追问

大神太感谢了。。我觉得你的答案是对的,但为撒老师给的答案是1,3

追答

不好意思,发现我的思路有问题。请误采纳。

追问

额。。。那答案是神马。。。。

追答

不好意思,发现我的思路有问题。
13
getchar每次只接收一个字符,放在缓存中。如果再用getchar接收一次,原来的就会被覆盖掉。
for(c=getchar(); getchar()!=’#’; c=getchar())我们把第一个c=getchar()称为1getchar,第二个c=getchar()称为2getchar。
第一次进入循环,1getchar接收1,然后判断,执行getchar()!=’#’此时这里的getchar()又接收了第二个第符2,也就是‘2’!=‘#’成立;然后进入循环,输出c;然后再进行2getchar,接收3,然后再执行getchar()!=’#’此时这里的getchar()又接收了字符4,也就是‘4’!=‘#’成立;然后输出c,注意,因为在执行getchar()!=’#’;时并没有付值给c所以c中的内容仍然为3,所以输出c为3,然后2getchar再接执行,接收5,然后执行getchar()!=’#’此时这里的getchar()又接收了字符#,也就是‘#’!=‘#’不成立,所以循环绍束,不输出5

本回答被提问者采纳
第3个回答  2013-01-06
看是for循环。
c=getchar(); //读入1,c='1'

getchar()!=’#’; //读入2

putchar(c); //输出c,即1

c=getchar() //读入3,c='3'

getchar()!=’#’; //读入4
putchar(c); //输出c,即3
c=getchar(); //读入5,c='5'
getchar()!=’#’; //读入#,不等式不成立
跳出循环。
第4个回答  2013-01-06
应该是135,那个"#"应该改成在英文状态下。追问

答案是1,3.不会做。。。。

相似回答