




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C語言中g(shù)etchar的用法以及實(shí)例解析目錄getchar解析一、getchar的返回類型及作用機(jī)制二、根據(jù)一段代碼初步了解三、實(shí)例(輸入密碼)進(jìn)一步了解1、代碼達(dá)不到理想效果2、輸入的密碼中有空格總結(jié)
getchar解析
一、getchar的返回類型及作用機(jī)制
getchar讀取字符的函數(shù)
intgetchar(void)
返回類型為int,參數(shù)為void.
有人可能會有疑惑,getchar既然是讀取字符的,為什么返回類型是int呢?
1、getchar其實(shí)返回的是字符的ASCII碼值(整數(shù))。
2、getchar在讀取結(jié)束或者失敗的時(shí)候,會返回EOF。
EOF意思是endoffile,本質(zhì)上是-1.
二、根據(jù)一段代碼初步了解
下面我們一起來看看下面這段代碼什么意思
#includestdio.h
intmain()
intch=0;
while((ch=getchar())!=EOF)
putchar(ch);
return0;
意思是
getchar先讀取一個(gè)字符放到ch里面去,如果這個(gè)字符不等于EOF,就進(jìn)入循環(huán),打印這個(gè)字符。當(dāng)getchar讀到文件末尾或者結(jié)束時(shí),它會返回一個(gè)EOF,此時(shí)結(jié)束循環(huán)。
我們來運(yùn)行試一下
輸入A,輸出A;輸入b,輸出b
當(dāng)我們想要結(jié)束時(shí),輸入ctrl+Z,再按回車即可。
注意,如果上面的代碼不用while循環(huán)的話,輸入123,putchar()只會輸出1。因?yàn)橐粋€(gè)getchar一次只能讀取一個(gè)字符。
三、實(shí)例(輸入密碼)進(jìn)一步了解
1、代碼達(dá)不到理想效果
我們再來看看下面這段代碼
#includestdio.h
intmain()
charpassword[20]={0};
printf("請輸入密碼:
scanf("%s",password);
printf("請確認(rèn)密碼(Y/N):
intch=getchar();
if(ch=='Y')
printf("確認(rèn)成功\n");
else
printf("確認(rèn)失敗\n");
return0;
按理說,我們是想要輸入密碼,然后再輸入N或者Y,根據(jù)我們輸入的是N還是Y打印確認(rèn)成功或確認(rèn)失敗。
我們來運(yùn)行一下,看看是否是這樣
可以看到,我們還沒有輸入Y或N,他就立馬跳出來了一個(gè)確認(rèn)失敗
為什么會是這樣呢?
(1)原理詳解
我們來看看它其中的原理:
scanf和getchar都是輸入函數(shù),它們都是從鍵盤上來讀取我們的數(shù)據(jù),但它們不是直接從鍵盤上來讀取我們的數(shù)據(jù)。它們和鍵盤之間有一個(gè)區(qū)域叫緩沖區(qū)。
輸入函數(shù)先來看緩沖區(qū)中是否有數(shù)據(jù),如果有,它直接就拿走了,不需要從鍵盤輸入,如果緩沖區(qū)什么都沒有,則需要從鍵盤輸入,再拿走。
明白這個(gè)道理后,我們回到上面那串代碼。
最開始緩沖區(qū)里沒有東西,所以我們這行代碼
scanf(%s,password);
就是從鍵盤輸入密碼,我們輸入123456。為了讓123456放進(jìn)去,我們還敲了一個(gè)回車,所以緩沖區(qū)里為
123456\n
接下來就是scanf來讀緩沖區(qū)里的字符串了,scanf讀取的方式是讀取\n之前的內(nèi)容,所以讀取的是123456.
printf(請確認(rèn)密碼(Y/N):后,就是下面這行代碼:
intch=getchar();
getchar用來接收字符,
getchar看到緩沖區(qū)中有數(shù)據(jù)(\n),直接取走,不需要從鍵盤輸入。自然也就出現(xiàn)了我們上面運(yùn)行結(jié)果的那一幕:還沒輸入N或Y,就立馬跳出確認(rèn)失敗了。
(2)解決措施
那么我們怎么解決這個(gè)問題呢?
很自然就能想到需要先把緩沖區(qū)里清空。
那我們就在前面加一個(gè)getchar把緩沖區(qū)中的\n給清理掉。
即代碼變?yōu)?/p>
#includestdio.h
intmain()
charpassword[20]={0};
printf("請輸入密碼:
scanf("%s",password);
getchar();//把緩沖區(qū)中的\n清理掉
printf("請確認(rèn)密碼(Y/N):
intch=getchar();
if(ch=='Y')
printf("確認(rèn)成功\n");
else
printf("確認(rèn)失敗\n");
return0;
運(yùn)行一下即可發(fā)現(xiàn),現(xiàn)在能夠得到我們的理想結(jié)果。
2、輸入的密碼中有空格
不過又有一個(gè)問題,當(dāng)我們輸入密碼為123456789時(shí)(中間有一個(gè)空格),還沒等我們輸入N或Y,又立馬跳出了確認(rèn)失敗。
這又是怎么回事呢?我們一起來看看
(1)原理詳解
首先緩沖區(qū)里沒有東西,我們需要通過鍵盤輸入密碼123456789,
然后scanf就來取緩沖區(qū)中的數(shù)據(jù),當(dāng)它讀到空格的時(shí)候,它就不再讀了(這是scanf的一個(gè)作用性質(zhì))。
所以scanf就只取走了123456,而緩沖區(qū)中還剩下(空格)789\n。
再往下,運(yùn)行到getchar();這行代碼,然而這里只有一個(gè)getchar,它只能讀取一個(gè)字符,也就是只讀了空格,緩沖區(qū)中還剩789\n。
再往下,就是我們的這行代碼intch=getchar();
getchar()一來就取走了緩沖區(qū)中的7,根本不需要我們從鍵盤輸入N或Y。運(yùn)行時(shí)自然它就自動(dòng)跳出了確認(rèn)錯(cuò)誤。
(2)解決措施
所以我們需要把緩沖區(qū)中的東西先全部清走。
那我們就用一個(gè)循環(huán),只要沒讀到\n,我們就一直用getchar讀。
即
//把緩沖區(qū)中的內(nèi)容全讀走
while(getchar()!='\n')
整段代碼如下:
#includestdio.h
intmain()
charpassword[20]={0};
printf("請輸入密碼:
scanf("%s",password);
//把緩沖區(qū)中的內(nèi)容全讀走
while(getchar()!='\n')
printf("請確認(rèn)密碼(Y/N):
intch=getcha
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)并購重組財(cái)務(wù)顧問與法律顧問合作協(xié)議
- 能源企業(yè)財(cái)務(wù)預(yù)測與預(yù)算編制合同
- 公共車庫租賃與智能停車誘導(dǎo)系統(tǒng)升級合同
- 有限空間作業(yè)氣體報(bào)警
- 二外日本語優(yōu)秀テキスト
- 經(jīng)濟(jì)部門工作總結(jié)
- 吸煙有害健康大班公開課
- 大學(xué)生心理健康與成長
- 藥毒中醫(yī)護(hù)理方案
- 醫(yī)院新進(jìn)人員院感崗前培訓(xùn)
- 南京市指導(dǎo)服務(wù)企業(yè)安全生產(chǎn)工作指引-加油站現(xiàn)場安全重點(diǎn)檢查指引分冊
- AQ/T 2077-2020 頁巖氣井獨(dú)立式帶壓作業(yè)機(jī)起下管柱作業(yè)安全技術(shù)規(guī)范(正式版)
- 【8物(滬科版)】合肥市第四十五中學(xué)2023-2024學(xué)年八年級下學(xué)期期末物理試題
- 區(qū)域代理商合同模板
- 國家開放大學(xué)(浙江)地域文化(本)作業(yè)1-5
- HG/T 2520-2023 工業(yè)亞磷酸 (正式版)
- 會所會員管理制度
- DZ/T 0462.8-2023 礦產(chǎn)資源“三率”指標(biāo)要求 第8部分:硫鐵礦、磷、硼、天然堿、鈉硝石(正式版)
- 廣東省廣州市海珠區(qū)2024年七年級下冊數(shù)學(xué)期末試卷附答案
- 湖南省長沙市芙蓉區(qū)2022-2023學(xué)年一年級下學(xué)期期末測試數(shù)學(xué)試卷
- JT-T 1495-2024 公路水運(yùn)危險(xiǎn)性較大工程專項(xiàng)施工方案編制審查規(guī)程
評論
0/150
提交評論