2014-12-04 61 views
0

我应该这样做节目输出,的getchar()是给用C

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

我希望它显示空白屏幕,直到我按下键盘上的任意字符。但它做的很奇怪。它显示我按下的任何内容。它不会终止,直到我按Enter键。

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

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

编辑:

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

#include <stdio.h> 

    main() 

    { 

    getchar(); 

    printf("Done"); 


    } 

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

+1

它不打印任何东西。你的终端驱动程序呢。 – 2014-12-04 15:34:51

+0

@ n.m。终端驱动意味着我的桌面屏幕? – user31782 2014-12-04 15:39:52

+0

所以我从来不需要putchar()来输出? – user31782 2014-12-04 15:40:50

回答

2

只有在getchar()完成后,程序才会终止。直到输入缓冲区填充后,getchar()才会完成。输入缓冲区直到按下“Enter”键才会填充。

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

+0

“终端驱动”是什么意思?它是我的Windows功能吗? – user31782 2014-12-04 15:42:43

+0

这是终端的一个功能,基本上就是命令行窗口。 – 2014-12-04 15:47:55

1

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

+0

printf()和putchar()是否也返回ascii值? – user31782 2014-12-04 15:44:00

+0

'printf()'返回它打印的字符数。 'putchar()'返回ascii值。 – 2014-12-04 15:45:51

1

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

+0

我的书没有提到我必须按Enter键才能终止getchar。 :( – user31782 2014-12-04 16:06:20

+0

因为这是一个非常基本的概念,你必须按回车键将输入发送到你的程序。 – 2014-12-04 16:41:23

+0

您的终端通常以'缓冲'和'本地回声'模式运行。您可以更改此设置,但如何操作取决于您使用的操作系统。在DOS/Windows AFAIR上,您可以简单地使用'getch()'而不是'getchar()'。在Unix上,您可以通过'stty'命令修改终端设置,或者使用'curses'或'ncurses'库,而不是使用'stdio'' getchar()',它并不真正了解或关心它正在读取的设备来自... – 2014-12-07 14:29:14