1. 程式人生 > >【C語言】getchar函式的控制檯輸入原理,回車符的處理

【C語言】getchar函式的控制檯輸入原理,回車符的處理

getchar函式的功能是從輸入流讀取一個字元,這是我們要明確的就是:

我們在控制檯需要輸入至少兩個字元才能保證這個函式的執行:

例如:

源程式:

char ch;

ch = getchar();

我們需要在標準輸入流裡面輸入   ”w 回車“,就是需要至少輸入兩個字元,一個是接受的正常字元,另一個就是回車換行符,這個回車符的作用就有些像觸發器,只要輸入了回車符源程式就會進行一次執行,如果在輸入流中一次輸入了足夠多的數,那麼以後就不用輸入了,因為源程式裡面的所有接受輸入流的函式都會自動從這個輸入流緩衝區裡面讀取資料。

比如baidu一位網友問的問題,非常好:

scanf("%c",&a); // 向a輸入一個字元
gets(b);             //向b輸入一個字串
gets(c);             //向c輸入一個字串
當我輸入一個字元到a後,回車
怎麼會直接跳到輸入字串c
我除錯看了下,它會自動在a輸入完後,向b輸入字元'\0'
這是為什麼了??

原因就是,開始的時候輸入了兩個字元,回車符觸發了程式的執行,當程式讀完第一個字元後,就把第一個字元賦值給了 scanf函式,接著那個回車符就被gets(b)讀去了,再接著緩衝區空了,這是就自然又要使用者從輸入流中輸入字元並以回車結束。

getchar函式和scanf函式一樣。

目前我知道的解決的辦法有兩個:

1 可以在這兩個函式後面 加一個讀取那個回車符的函式,getchar();

2 如果是scanf()函式可以 直接寫讀入回車符  scanf("%c\n",&a);主要是新增 格式字串後面的那個 \n。至於原理現在我還說不太清,但感覺可能是 兩個換行符同時出現所以編譯器自動消掉了一個吧。此問題還在探索中。。。