请考虑以下代码:
while ((c = getchar()) != EOF) // c is of char type
putchar(c);
getchar
从 键盘中检索一个char
。但是当我观察它的执行时,发现putchar
的输出在getchar
遇到ENTER key
之前不会发生。因此,getchar
实际检索整个字符串直到ENTER
键。
实际输出:
Hello
Hello
通缉输出:
H
H
E
E
L
L
O
O
答案 0 :(得分:2)
流被缓冲,'\n'
字符刷新缓冲区,所以是的,您需要按Enter键才能使字符变为&#34; 刷新&#34;。< / p>
此外,// c is of type char
错误,因为EOF
无法表示。 getchar()
函数返回int
,因此c
必须是int
类型,或c
可能会溢出。
答案 1 :(得分:0)
当您输入字符串Hello
时,它会进入键盘缓冲区。在按 Enter / Reurn 按钮时,此字符流将转到标准输入缓冲区,并从那里getchar
逐个读取它。
请注意,getchar
会返回int
,因此c
应为int
类型。
答案 2 :(得分:0)
getchar()
无法直接从键盘读取击键;它从输入流中读取字符,缓冲使得输入不会发送到您的程序,直到您点击 Enter 。
如果您需要在键入时阅读单个按键,那么最好使用特定于平台的实用程序(例如getch
库中的ncurses
函数)来执行此操作。