C語言庫函數getchar()新見解

getchar()的描述以及用法

getchar()是stdio.h中的庫函數,它的作用是從緩沖區中讀取一個字符,如果緩沖區中沒有字符可供讀取,它就會等待終端鍵盤輸入字符,按回車鍵表示輸入結束。

* 回車鍵也算一個字符,放在緩沖區中(後面會在VS調試監視出給大傢看)*

下面是 getchar() 函數的聲明:

int getchar(void)

該函數的返回類型是int類型,返回值是用戶輸入字符的ASCII碼值。

案例

基礎的例子就不列舉瞭,來說說今天刷C語言題目遇到的一個題目

判斷輸入的是否是字母(簡單的題目)

int main()
{
    char a = '0';
    scanf("%c", &a);
    if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z')
        printf("YES\n");
    else
        printf("NO\n");
    return 0;
}

直接判斷就可以瞭,但是我想著可不可以實現多組輸入,輸入一個字符判斷一個字符(雖然題目沒說到)於是我就嘗試寫瞭如下代碼

int main()
{
    char a = '0';
    while (scanf("%c", &a) != EOF)
    {
        if (a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z')
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

此時運行結果如下:

運行出來為啥和我想的不一樣,不應該輸入一個隻判斷一次嗎?怎麼又進瞭一次循環並自動判斷為false輸入NO瞭?然後我開始調試。

這是輸入瞭a之後跳出瞭第一次循環

然後我按F10程序繼續跑瞭,進入瞭第二次循環並直接運行瞭else後的語句

此時我才發現變量a的值發生瞭變化,變成瞭'\n',我才意識到鍵盤錄入按回車結束時,回車也算作一個字符'\n'被留在瞭緩沖區,所以進行瞭第二次判斷字符‘\n’,則輸出NO,這時候我才瞭解到getchar()函數在這裡使用的好處瞭,所以我對代碼進行瞭更改

此時程序重新運行

要想再次使用scanf就要在這裡調用getchar()把緩沖區的 '\n' 給拿走,才能完成多組輸入字符的判斷

圖文解釋

因為scanf把\n前面的字符讀取瞭,此時緩沖區還剩下'\n',所以在代碼中加入一條getchar()將'\n'做清除,方便後續程序的正常進行。

總結

以上就是我對getchar()部分理解,希望對大傢有幫助,有待改進的地方希望大傢隨時指出!

到此這篇關於C語言庫函數getchar()新見解的文章就介紹到這瞭,更多相關C語言 getchar()內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: