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!