這篇文章前三個指令: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, ... );
功能:從格式化之輸入。
傳回:傳回成功配對引數之個數。
說明:詳細說明請  看這篇文章

arrow
arrow
    全站熱搜

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