程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> [C語言]getchar函數的控制台輸入原理,回車符的處理

[C語言]getchar函數的控制台輸入原理,回車符的處理

編輯:關於C

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

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

例如:

源程序:

char ch;

ch = getchar();

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

 


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


[html]
<SPAN style="FONT-SIZE: 12px">scanf("%c",&a); // 向a輸入一個字符 
gets(b);             //向b輸入一個字符串 
gets(c);             //向c輸入一個字符串 
當我輸入一個字符到a後,回車 
怎麼會直接跳到輸入字符串c 
我調試看了下,它會自動在a輸入完後,向b輸入字符'\0' 
這是為什麼了??</SPAN> 

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。至於原理現在我還說不太清,但感覺可能是 兩個換行符同時出現所以編譯器自動消掉了一個吧。此問題還在探索中。。。

 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved