int a
scanf("%d",&a);
什么意思,是從鍵盤讀取一個數字存放到a中。錯,scanf和所有從鍵盤獲取輸入數據的函數都不是直接從鍵盤獲取數據的,而是從“標准輸入”獲取數據的,如果標准輸入沒有數據,才讓用戶從鍵盤輸入數據的。
當程序提示我們輸入數據的時候實際上發生了這樣的過程:
鍵盤數據----------緩沖區----------標准輸入
緩沖區你可以理解為程序分配的一塊內存空間,標准輸入你可以理解為另外一塊內存空間
你有沒有發現在調用scanf輸入數據的時候我們是可以編輯輸入數據的,本想輸入數字,結果輸入了字母,可以按退格鍵,重新輸入的,那么這些字符就被輸入到了緩沖區里面了,直到按下回車之后,緩沖區的數據連同最后輸入的回車一起被寫到標准輸入里面取了。然后scanf從標准輸入讀取數據。
char ch; ch = getchar(); putchar(ch); ch = getchar(); putchar(ch);
看下上面這段代碼,getchar意思是從標准輸入獲取一個字符,但是我輸入的是hello 共5個字符,當我按下回車的時候,這5個字符連同回車一同被寫入到了標准輸入中,putchar是從標准輸入獲取一個字符輸出,默認是第一個字符,那么自然會輸出h
然后下面我又調用 getchar(),這次還要從鍵盤讀取輸入數據嗎? 不需要,是直接從標准輸入讀取的數據,由於標准輸入現在是hello\n這幾個字符, getchar獲取的獲取的是e這個字符,然后調用putchar輸出e。所以最后的結果是he。
我寫了一個程序來把標准輸入的數據放到輸入中。
char ch;
char test[10] = {0};
int x=0;
while(x<6)
{
ch = getchar();
test[x] = ch;
x++;
}
運行結果:

可以看到標准輸入的最后一個字符是\n
getchar scanf這些輸入函數並不限制你輸入字符的個數,實際上你想輸入多少個字符都可以,只是當你按下回車的時候,所有緩沖區的數據被寫入到標准輸入里面,然后getchar從標准輸入從里面讀一個字符,scanf從標准輸入讀一個數字、一個字符、一個字符串。
以前一直覺得getchar調用一次就從鍵盤輸入一次數據,並不是這樣的。
