這篇文章前三個指令:getchar、getch、geche 很容易搞混,可多寫些例子便可了解。另在看文章前要先說明,'\n' 雖是換行符號,但實際上使用者按下 Enter 時,是送出 '\r', '\n' 二個字元。

1. getchar

表頭:stdio.h
原型:int getchar ( void );
功能:從標準輸入取得一個字元。
引數:無。
傳回:該字元之 ASCII。
說明:輸入字元會顯示在螢幕上,按下 enter 時,getchar 才會從緩衝區讀一個字元進來。

ex: 寫一程式, 顯示使用者輸入的所有文字。
 do{
      ch = getchar();
      printf("%c", ch);
 }while(ch!='\r' && ch!='\n');  // 以換行符號 (即 Enter) 為斷點

輸入:EdisonX is a man !!  (按下Enter)
輸出:EdisonX is a man !!

※當輸入 "EdisonX is a man !!" 時,事實上這一串字都還留在緩衝區裡面,按下 Enter 時,第一次 getchar 抓出 'E',緩衝區還留有 "disonX is a man!!",於是 while 又繼續往下抓;第二次 getchar 抓出 'd',緩衝區留有 "isonX is a man!!";依此類推。直到讀到 Enter 所送的字元('\r', '\n')時,便跳出了回圈。

2. getch (非標準)

表頭:conio.h
原型:int getch ( void );
功能:引數:無。
傳回:該字元之 ASCII。
說明:輸入字元不會顯示在螢幕上,只要一輸入 getch 馬上將該字元讀走。

ex: 寫一個類似密碼輸入的程式,使用者輸入任何字元都會出現 * ,直到輸入 q 為止。

 do{
      ch = getch();
      printf("*");
 }while(ch!='q');  // 輸入 'q' 就結束

輸入:1234q
輸出:*****

※ 事實上 getch 只要你一輸入它就馬上吃下來,不會顯示在螢幕上,所以故意在loop裡面加上一個 printf("*"), 這樣才能知道輸入多少字。如果將 printf 那行改成 printf("%c*", ch); 輸出結果將會變成  "1*2*3*4*q*"。

3. getche (非標準)

表頭:conio.h
原型:int getche ( void );
功能:從標準輸入取得一個字元。
引數:無。
傳回:該字元之 ASCII。
說明:輸入字元會顯示在螢幕上,只要一輸入 getche 馬上將該字元讀走。

ex: 這個例子非常不好舉,建議直接執行下例 code 會比較知道在說些什麼。

 do{
      ch = getche();
      printf("*");
 }while(ch!='q');  // 輸入 'q' 就結束

輸(出)入:1*2*3*4*

※  getche 是會顯示輸入字元,所以使用者如果輸入 '1' 時會顯示 '1' ,接著又馬上輸出 '*'。

4. scanf

表頭:stdio.h
原型:int  scanf ( const char * format, ... );
功能:從格式化之輸入。
傳回:傳回成功配對引數之個數。
說明:詳細說明請  看這篇文章

edisonx 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • 路過
  • 寫的不錯 不過我比較希望可以看到
    什麼情況該用哪個函式比較好
    非標準不太清楚是指???
  • 由於 getchar、getche、getch 這三個相似程式高,較比較建議自己去 try 過一遍,否則只看過文章仍無法吸收。

    C 語言之標準函式庫是有制定的(這也是常聽到的 C90, C99 標準),至於上述的非標準,指的是該指令並非存在於 C90/C99 制定之標準函式庫裡,但大多之 compiler 都已有實做。

    edisonx 於 2011/02/03 00:38 回覆

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼