这个程序应该做什么,
#include<stdio.h>
main()
{
getchar();
}
我希望它能显示一个空白屏幕,直到我按下键盘上的任何字符。但它的作用很奇怪。它会显示我按下的内容。它永远不会终止,直到我按Enter键。
据我所知,getchar()应该只读一个字符。它不应该输出任何东西。
- 为什么要打印我输入的每个字符?
编辑:
为什么getchar()在读取一个字符后停止,例如在这段代码中:
#include <stdio.h>
main()
{
getchar();
printf("Done");
}
程序在读完一个字符后应打印完成。
答案 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
只会在你输入时返回。
我希望你对文件处理有一些了解,否则这个答案可能会让你感到困惑。