C语言 while (putchar(getchar()) != '!') 解释

​ 代码运行到第4行,getchar()需要输入的数据,但是输入的缓冲区没有数据,所以就需要再命令行窗口(黑窗口)输入新的数据

image

​ 这时候getchar()只需要输入1个字符的数据,但是你可以输入多个数据,打回车的时候之前输入的一行数据都会被发送到缓冲区,回车之前都还可以删除刚才输入的数据修改修改,因为数据还没发送到缓冲区

imageimage

输入了china!然后按了回车,然后 china!\n 总共七个字符就发送到了缓冲区

然后getchar()就获取了第一个字符'c',因为getchar()的返回值是获取的字符,所以它会在它的位置留下这个字符,getchar()就变成了'c'
然后putchar(getchar())就变成了putchar('c')putchar()输出这个字符到命令行窗口里(黑窗口)
image

因为putchar()的返回值是打印出去的字符,所以它会在它的位置留下这个字符,

putchar(getchar()) != '!'就变成了'c' != '!',条件判断结果是 True,满足条件,进入循环

然后循环里啥都没有,进入下一次循环,回到第四行,继续运行

image
image

这时候getchar()还要获取一个字符,这时候缓冲区里原本存的数据是chian\n'c'被第一次循环处理掉了,剩下了hina\n缓冲区里还有数据,getchar()就获取了第一个字符'h'

之后就重复上面的过程

putchar(getchar()) != '!' --> putchar('h') != '!' --> 'h' != '!' --> 1

再次进入循环
image
image
image
image
image

最后一次循环,缓冲区里只剩!\n两个字符了,getchar()获取第一个字符'!'

putchar(getchar()) != '!' --> putchar('!') != '!' --> '!' != '!' --> 0

image

条件判断为False,未能成功进入循环,循环结束

posted @ 2024-05-16 13:44  Kazuma_124  阅读(185)  评论(0编辑  收藏  举报