C語言庫函數(shù)getchar()新見解
getchar()的描述以及用法
getchar()是stdio.h中的庫函數(shù),它的作用是從緩沖區(qū)中讀取一個字符,如果緩沖區(qū)中沒有字符可供讀取,它就會等待終端鍵盤輸入字符,按回車鍵表示輸入結(jié)束。
* 回車鍵也算一個字符,放在緩沖區(qū)中(后面會在VS調(diào)試監(jiān)視出給大家看)*
下面是 getchar() 函數(shù)的聲明:
int getchar(void)
該函數(shù)的返回類型是int類型,返回值是用戶輸入字符的ASCII碼值。
案例
基礎(chǔ)的例子就不列舉了,來說說今天刷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; }
直接判斷就可以了,但是我想著可不可以實(shí)現(xiàn)多組輸入,輸入一個字符判斷一個字符(雖然題目沒說到)于是我就嘗試寫了如下代碼
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; }
此時(shí)運(yùn)行結(jié)果如下:
運(yùn)行出來為啥和我想的不一樣,不應(yīng)該輸入一個只判斷一次嗎?怎么又進(jìn)了一次循環(huán)并自動判斷為false輸入NO了?然后我開始調(diào)試。
這是輸入了a之后跳出了第一次循環(huán)
然后我按F10程序繼續(xù)跑了,進(jìn)入了第二次循環(huán)并直接運(yùn)行了else后的語句
此時(shí)我才發(fā)現(xiàn)變量a的值發(fā)生了變化,變成了'\n',我才意識到鍵盤錄入按回車結(jié)束時(shí),回車也算作一個字符'\n'被留在了緩沖區(qū),所以進(jìn)行了第二次判斷字符‘\n’,則輸出NO,這時(shí)候我才了解到getchar()函數(shù)在這里使用的好處了,所以我對代碼進(jìn)行了更改
此時(shí)程序重新運(yùn)行
要想再次使用scanf就要在這里調(diào)用getchar()把緩沖區(qū)的 '\n' 給拿走,才能完成多組輸入字符的判斷
圖文解釋
因?yàn)閟canf把\n前面的字符讀取了,此時(shí)緩沖區(qū)還剩下'\n',所以在代碼中加入一條getchar()將'\n'做清除,方便后續(xù)程序的正常進(jìn)行。
總結(jié)
以上就是我對getchar()部分理解,希望對大家有幫助,有待改進(jìn)的地方希望大家隨時(shí)指出!
到此這篇關(guān)于C語言庫函數(shù)getchar()新見解的文章就介紹到這了,更多相關(guān)C語言 getchar()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++11新特性“=default”,“=delete”的使用
=default、=delete 是C++11的新特性,分別為:顯式缺省(告知編譯器生成函數(shù)默認(rèn)的缺省版本)和顯式刪除(告知編譯器不生成函數(shù)默認(rèn)的缺省版本),本文就來介紹一下如何使用2021-05-05C語言實(shí)現(xiàn)將字符串轉(zhuǎn)換成整數(shù)
這篇文章主要為大家詳細(xì)介紹了如何用C語言寫一個函數(shù),把字符串轉(zhuǎn)換成整數(shù),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04關(guān)于C++中構(gòu)造函數(shù)初始化成員列表的總結(jié)
下面小編就為大家?guī)硪黄P(guān)于C++中構(gòu)造函數(shù)初始化成員列表的總結(jié)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12C++實(shí)現(xiàn)LeetCode(769.可排序的最大塊數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(769.可排序的最大塊數(shù)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++異步操作future和aysnc與function和bind
這篇文章主要介紹了C++異步操作future和aysnc與function和bind,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09LintCode-排序列表轉(zhuǎn)換為二分查找樹分析及實(shí)例
這篇文章主要介紹了LintCode-排序列表轉(zhuǎn)換為二分查找樹分析及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04c++ 頭文件<cwchar>中常見函數(shù)的實(shí)現(xiàn)代碼
本文記錄了c++ 頭文件<cwchar>中常見函數(shù)的實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12