gpt4 book ai didi

c - 克尼根和里奇。复制字符示例

转载 作者:行者123 更新时间:2023-11-30 17:30:39 25 4
gpt4 key购买 nike

我正在阅读 Kernighan 和 Ritchie 所著的《C 编程语言》一书来学习 C。在1.5.1文件复制主题上,有一个使用以下代码复制输入字符的示例:

#include <stdio.h>
main()
{

int c;

while ((c=getchar()) != EOF)
putchar(c);

}

问题是:为什么如果我只向输入发送一行字符(例如“abc”,然后按“CTRL + Z”结束文件),程序将不会显示任何事物。如果我发送几行,它会正确显示所有内容。

其他信息:我将 Eclipse Luna CDT 与 MinGW 结合使用。

最佳答案

这里您需要了解一件事,直到 EOF 发生,您的 while((c=getchar()) != EOF) 才会为真!当您输入CTRL + z时,它是EOF,因此您的while条件将失败,它不会执行旁边的语句情况。

while ((c=getchar()) != EOF) // when it fails
putchar(c); // it wont be executed.

while 会如何失败?

当您输入a时,变量c将得到a,并且它将检查EOF,现在条件为真,因此它将等待下一个字符,依此类推。当您输入一些内容后按 Enter 时,它将显示输出!

假设输入 - abcdefEnter,当您按 Enter 时,c 保存 Enter 的值,所以这种情况 c != EOF true,所以它执行 putchar(c);!

输出 - abcdef

但是当你像这样给出时 - abcdeCTRL + z,当你按 CTRL + z 时,c 持有 EOF,所以这种情况下 c != EOF 条件失败,所以我不会执行 putchar(c);。所以屏幕上什么也看不到。

如果您想像这样更改代码并尝试 -

#include <stdio.h>
main()
{

int c;

while (c=getchar()) // when you press CTRL + z also it will work
putchar(c);

}

关于c - 克尼根和里奇。复制字符示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com