getchar()在C中给出输出

时间:2014-12-04 15:30:57

标签: c io getchar

这个程序应该做什么,

#include<stdio.h>
main()
{   
  getchar();
}

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

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

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

编辑:

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

   #include <stdio.h>  

   main()  

   {  

    getchar();  

   printf("Done");  


  }  

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

3 个答案:

答案 0 :(得分:2)

您的计划将在getchar()完成之前终止。在填充输入缓冲区之前,getchar()不会完成。在您按下“输入”按钮之前,不会填充输入缓冲区。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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