c - 为什么此代码打印行而不是单个字符

标签 c putchar

#include <stdio.h>
int main()
{
  int c;
  while((c=getchar())!=EOF)
  putchar(c);
  return 0;
}

在我对 C 的有限接触中,只要 C!=EOF 就会执行 while 条件,这基本上会打印 c,然后等待下一个字符并尝试检查是否违反条件。因此,对于我们输入的每个字符,putchar 都会执行。 但是,当我运行可执行文件时,似乎发生的事情是打印语句仅在我按下换行符 (Enter) 时才起作用,并且它有某种缓冲区,可以在输入中打印整行。 在按下新行之前,我没有在代码中看到任何缓冲区来保存字符,那么这里做了什么? 在按下新行之前,这些字符存储在哪里?

最佳答案

当像这样从控制台读取时,您的程序实际上根本不会接收任何输入,直到您按下 enter,然后它会立即读取并处理整行。

在您按下回车键之前,您的程序甚至不知道这些字符的存在,此时它们被发送到标准输入缓冲区。从这里开始,您的循环将读取并打印每个字符(包括换行符),直到缓冲区为空(意味着它将等待更多输入)或到达文件末尾。

关于c - 为什么此代码打印行而不是单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202648/

相关文章:

c - 在C中对文件进行排序

c - g_input_stream_read 中的 GTK+ 缓冲区

c++ - 以下程序片段的可能输出?

c - 如何从 mongodb C 驱动程序结果中过滤掉 "_id"

c - if (c != EOF) 用于逆波兰计算器中的内容是什么

c - 指向二维数组的指针

对 "while(getchar() != ' 感到困惑\n')"

c - 尝试仅使用 getchar/putchar 输出用户输入

c - Putchar、getchar、while 循环中缺少字符

C 结构中的数组是否对齐?