gpt4 book ai didi

c - K&R 中的 "File Copying"部分

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

我是编程新手,我似乎无法理解为什么我的代码中会发生以下情况,即:

#include <stdio.h>

/*copy input to output; 1st version */

main()
{
int c;

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

经过一番阅读后,我收集了以下内容:

  1. 在我按 Enter 之前不会执行任何操作,因为 getchar() 是一个保持函数。
  2. 在我按 Enter 之前,我的所有击键都存储在缓冲区中
  3. 当调用 getchar() 时,它只是查看缓冲区中的第一个值,变成该值,然后从缓冲区中删除该值。

我的问题是,当我删除第一个 c = getchar() 时,生成的代码片段与原始代码具有完全相同的功能,尽管在我输入任何内容之前,会立即出现一个笑脸符号屏幕上。为什么会出现这种情况?是否是因为 putchar(c) 没有保留代码,并尝试显示尚未定义的 c,因此它输出一些随机符号?如果有帮助的话,我正在使用 Code::Blocks。

最佳答案

您列出的函数将简单地回显您输入的每个字符。 I/O 确实是“缓冲”的。操作系统的键盘输入驱动程序正在执行此缓冲。当它缓冲您按下的按键时,它会向您回显每个按键。当您按下换行符时,驱动程序会将缓冲的字符传递给您的程序,然后 getchar 就会看到它们。

正如所写,该函数应该可以正常工作:

c = getchar();   // get (buffer) the first char

while (c != EOF) { // while the user has not typed ^D (EOF)
putchar(c); // put the character retrieved
c = getchar(); // get the next character
}

由于键盘驱动程序缓冲,每次按换行符或使用 ^D (EOF) 退出时,它只会回显。

笑脸来自 @YuHao 的描述:您可能在运行的内容中缺少第一个 getchar ,因此 putchar 正在回显垃圾。可能是 0,它在屏幕上看起来像一个笑脸。

关于c - K&R 中的 "File Copying"部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382528/

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