2014-12-04 29 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