c語言標準輸入和scanf的關系
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從標準輸入讀一個數字、一個字符、一個字符串
c語言標準輸入和scanf的關系