C语言 while (putchar(getchar()) != '!') 解释
代码运行到第4行,getchar()
需要输入的数据,但是输入的缓冲区没有数据,所以就需要再命令行窗口(黑窗口)输入新的数据
这时候getchar()
只需要输入1个字符的数据,但是你可以输入多个数据,打回车的时候之前输入的一行数据都会被发送到缓冲区,回车之前都还可以删除刚才输入的数据修改修改,因为数据还没发送到缓冲区
输入了china!然后按了回车,然后 china!\n
总共七个字符就发送到了缓冲区
然后getchar()
就获取了第一个字符'c'
,因为getchar()
的返回值是获取的字符,所以它会在它的位置留下这个字符,getchar()
就变成了'c'
然后putchar(getchar())
就变成了putchar('c')
,putchar()
输出这个字符到命令行窗口里(黑窗口)
因为putchar()
的返回值是打印出去的字符,所以它会在它的位置留下这个字符,
putchar(getchar()) != '!'
就变成了'c' != '!'
,条件判断结果是 True
,满足条件,进入循环
然后循环里啥都没有,进入下一次循环,回到第四行,继续运行
这时候getchar()
还要获取一个字符,这时候缓冲区里原本存的数据是chian\n
,'c'
被第一次循环处理掉了,剩下了hina\n
。缓冲区里还有数据,getchar()
就获取了第一个字符'h'
。
之后就重复上面的过程
putchar(getchar()) != '!'
-->
putchar('h') != '!'
-->
'h' != '!'
-->
1
再次进入循环
最后一次循环,缓冲区里只剩!\n
两个字符了,getchar()
获取第一个字符'!'
putchar(getchar()) != '!'
-->
putchar('!') != '!'
-->
'!' != '!'
-->
0
条件判断为False
,未能成功进入循环,循环结束