天天看點

getchar 和 getch 詳解

函數名: getchar

  功 能: 從stdin流中讀字元

  用 法: int getchar(void);

  注解:

  getchar有一個int型的傳回值。當程式調用getchar時,程式就等着使用者按鍵。使用者輸入的字元被存放在鍵盤緩沖區中,直到使用者按回車為止(回車字元也放在緩沖區中)。當使用者鍵入回車之後,getchar才開始從stdin流(輸入緩沖區)中每次讀入一個字元。getchar函數的傳回值是使用者輸入的第一個字元的ASCII碼,如出錯傳回-1,且将使用者輸入的字元回顯到螢幕。 如使用者在按回車之前輸入了不止一個字元(如:abc),其他字元(bc)會保留在鍵盤緩存區中,等待後續getchar調用讀取。也就是說,後續的getchar調用不會等待使用者按鍵,而直接讀取緩沖區中的字元,直到緩沖區中的字元讀完為後,才等待使用者按鍵。getchar可以從輸入緩沖區中讀任意字元(包括空格、回車)。

  getch與getchar基本功能相同,差别是getch直接從鍵盤擷取鍵值,不等待使用者按回車,隻要使用者按一個鍵,getch就立刻傳回,getch傳回值是使用者輸入的ASCII碼,出錯傳回-1。輸入的字元不會回顯在螢幕上。getch函數常用于程式調試中,在調試時,在關鍵位置顯示有關的結果以待檢視,然後用getch函數暫停程式運作,當按任意鍵後程式繼續運作。

      即:getchar是從輸入緩沖區中讀,而getch是從鍵盤中直接讀。

      如圖所示:

     getchar《-----------------------------【輸入緩沖區】《------------------------------------鍵盤

     getch   《----------------------------------------------------------------------------------------鍵盤

  程式例:

  #include <stdio.h>

  int main(void)

  {

  int c;

  

  while ((c = getchar()) != '/n')

  printf("%c", c);

  return 0;

  }

  注:可以利用getchar()函數讓程式調試運作結束後等待程式設計者按下鍵盤才傳回編輯界面,用法:在主函數結尾,return 0;之前加上getchar();即可。

例2:

#include<stdio.h>

void  func(int n)

  { 

     char c;

     if (n<=1)

        {

c=getchar();

putchar(c);

        }

else

{

c=getchar();

func(n-1);  //遞歸

putchar(c);

}

  }

int main()

   //  func(5);//(1)輸入5個字元

     func(6);//(2)輸入6個字元

     return 0;

}

例2中,【1】我們先把(1)處的代碼注釋掉,那麼我們先設定的輸入是6個字元,但是,我們看到的輸入隻有3個字元,why?

           其實,我們輸入的就是6個字元,其中包括3個Enter鍵。

           如:我們依次輸入:1,2,3 就不能再輸入了

           在螢幕上會顯示:1

                                          2

                                          3

其實,每個字元後面都有一個Enter鍵,1\n2\n3\n共有6個字元。因為getchar會把回車也從輸入緩沖區中讀出來,其實,getcahar會把任意字元都讀出來

                 (Enter鍵和字元都是通過鍵盤輸入,并一起先存放在輸入緩沖區中)。

      【2】這次,我們把(2)處的代碼注釋掉,那麼我們這次設定的輸入是5個字元,但是,我們看到的輸入也隻有3個字元。

      其實,我們輸入的就是5個字元,其中包括2個Enter鍵。

  如:我們依次輸入:1,2,3 就不能再輸入了

           在螢幕上會顯示:1

                                          2

                                          3

同上,每個字元後面都有一個Enter鍵,1\n2\n3共有5個字元。