24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1685  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

sunhan

木虫 (正式写手)

[求助] c语言问题,大侠们求助!!!

while (ch=getchar()=='A')
;
请问运行这个程序后,输入A,最终ch的值为什么是0而不是1?

百思不得其解 求教
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

Leteverythinggo,stickonmyroad.
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

jjdg(金币+1): 感谢应助 2012-02-22 00:51:39
引用回帖:
3楼: Originally posted by sunhan at 2012-02-21 23:26:58:
恩,谢谢你
我以为getchar()是这样工作的:输入A ,只有按回车键才能被存入,没想到当输入A时就已经被赋值了

你的理解没错,只是没意识到getchar是带缓冲的,你输入的东西都先放在缓冲里面了:'A' 和 回车

当回车之后,getchar就开始从缓冲开始的地方处理你刚才输入的东西了

PS:也有不带缓冲的IO函数,具体平台相关了
4楼2012-02-21 23:40:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

sunhan: 回帖置顶 2012-02-22 16:24:50
引用回帖:
5楼: Originally posted by sunhan at 2012-02-22 07:54:33:
那么A在缓冲中,为什么程序可以进入while循环,好像这个时候computer就开始处理字符并且赋值了
也就是说,是不是A 一输进去就开始运行了?

while (ch=getchar()=='A')
先看看这句话分拆后的顺序:

1. 进入while
2. 执行getchar
3. 判断getchar的返回值是否=='A'
4. 把第3步判断的结果(真为1,假为0),赋值给ch
5. 判断ch的值是否为真,若为真则跳回第2步,若为假则跳出while

然后,执行的时候,首先是进入了while,在第二步的时候,碰到getchar,则发生阻塞等待输入回车,这个时候如果你输入:

AAAA\n

有回车了之后,第一次getchar读到第一个'A',返回'A',和‘A’比较,赋值1给ch,while判断为真,继续循环,第二次getchar读到第二个'A'......直到getchar读到最后的那个回车,判断不等于'A',返回0,赋值给ch,最后跳出while
7楼2012-02-22 08:42:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sunhan 的主题更新
信息提示
请填处理意见