getchar()在C中给出输出

该计划应该做什么,

#include main() { getchar(); } 

我希望它能显示一个空白屏幕,直到我敲击键盘上的任何字符。 但它的作用很奇怪。 它会显示我按下的内容。 它永远不会终止,直到我按Enter键。

据我所知,getchar()应该只读一个字符。 它不应该输出任何东西。

  • 为什么要打印我输入的每个字符?

编辑:

为什么getchar()在读取一个字符后停止,例如在此代码中:

  #include  main() { getchar(); printf("Done"); } 

阅读一个字符后,程序应打印完成。

getchar()完成之前,您的程序不会终止。 在填充输入缓冲区之前, getchar()不会完成。 在您按“Enter”之前,不会填充输入缓冲区。

您看到的角色是您正在键入的角色。 这是默认的终端驱动行为,不是由您的程序驱动的。

您正在按键,因此您的控制台显示相同的字符。 这是预期的行为。 getch()还将返回正在屏幕上打印的字符的ascii值。

getchar基本上做的是从stdin读取。 这是一个文件描述符为0的文件,它通常是指您键入的终端(除非您通过< ,例如cat < sample.txt将其更改为某个文件)。 与任何文件一样,您可以调用文件0上的read - 如果是终端,只要您在终端输入内容并按回车键read就会响应。 除非你这样做,否则read stdin的调用只会等待它才能读取。 这就是你的程序正在等待的原因:它调用stdin read (文件0),并且因为stdin是终端,所以只有当你按Enter键时才会返回。 我希望你对文件处理有一些了解,否则这个答案可能会让你感到困惑。