c语言 输入字符流问题

图片是节选代码,是一个故意有问题的例子,书上说,此代码出错点就是比如你输入了
a【空格】2【空格】 3【回车】
之后调用dispaly函数然后printf完最后的两行,就直接跳出循环了,而期望目标是重新希望用户输入。
书上写的是跟在3后面的【回车】被getchar读取了,因此满足循环跳出条件。我的疑问是为什么getchar下一个读取的是3后面的【回车】,不是a后面的【空格】?

第1个回答  2014-02-16
getchar是从键盘里读取一个字符,包括空格和回车,它是读到了a后面的空格,可是跳出循环的条件是读到回车,所以直到回车才跳出
第2个回答  2014-02-16
首先ch=getchar()从键盘获取一个字符a 然后运行scanf("%d %d",&rows,&cols);
而scanf函数是不接收空格回车的,所以2和3赋给了rows和cols,进入下次循环的时候ch就接收了3后面的回车了,循环结束。追问

哦,我输入了ab【空格】3【空格】4【回车】这时会怎么样?

追答

a还是给了ch,b给了rows,3给了cols,执行循环。
下次循环空格给了a,4给了rows,cols还在等待输入。(错了,我想想)

追问

我试了一下结果不是这样的,应该是读取a之后,没能读到2和3,因此没有调用display,却直接printf了,第二次循环,getchar读到了字符b,然后读到了2 3,就调用上了display输出两行三列b,第三次getchar读取到了\n,就跳出循环了。好难啊,谢谢了!

追答

你把b改成数字就是我说的那样了 ,刚才没有考虑到格式问题。

本回答被提问者采纳
相似回答