C語言有緩沖輸入和非緩沖輸入兩種情況,默認緩沖輸入,因為有的計算機不支持非緩沖輸入。緩沖輸入下,通過標准輸入(鍵盤)輸入的字符會先存在輸入緩沖區里,同時會回顯到屏幕上。這樣就可以在輸入回車(將輸入緩沖區清空,並發送到程序的輸入隊列中,供程序使用)之前,進行輸入的修改。但是也支持非緩沖輸入,不需要輸入回車來將輸入發送給程序,而是鍵盤的任何輸入都直接發送到程序的輸入隊列中。
簡言之,緩沖輸入的流程是:鍵盤-》輸入緩沖區-》程序中的輸入隊列 非緩沖輸入的流程是: 鍵盤-》程序中的輸入隊列
getche()和getch()這兩個函數是用於非緩沖輸入的,前者提供回顯(記:多一個字母,多一個小功能),后者不提供回顯。
C函數一般都有返回值,只是有時候不需要獲取這個返回值罷了。
printf返回打印的字符的數目,有輸出錯誤則返回負數。
scanf返回讀入項目的個數,如果讀入失敗(比如想讀入一個%d,但是用戶卻輸入的'a')會返回0,這時候輸入隊列頭指針不向后移,下次getchar或者scanf還是從剛才的位置開始;讀到文件結尾返回EOF(一般在頭文件中會有#define EOF -1)。
測試getche和getch的例子如下所示:(在c++中需要加上頭文件 #include "conio.h")
#include "stdio.h" int main(void) { int d; char ch; printf("Input a character:"); ch=getchar(); printf("\nYou input a '%c'\n", ch); ch = getche(); printf("\nYou input a '%c'\n", ch); ch=getch(); printf("\nYou input a '%c'\n", ch); while((ch=getchar())!='\n') { putchar(ch); } getchar(); return 0; }
輸入:abcd[enter]jk
輸出:a
j
k
bcd //說明輸入隊列不受getche和getch這些非緩沖函數的影響