真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【C語言】使用getchar與scanf出現(xiàn)的一些問題-創(chuàng)新互聯(lián)

文章目錄
  • 一、scanf 在緩沖區(qū)獲取數(shù)據(jù)的一些問題

    創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序定制開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。
    • 1、scanf 不會拿緩沖區(qū)里的

    • 2、scanf 只會拿空格前的數(shù)據(jù)

  • 二、getchar 在緩沖區(qū)獲取數(shù)據(jù)的一些問題
  • 三、scanf 和 getchar 用在一起會出現(xiàn)一些易出錯的問題
  • 四。解決問題

前言

給剛?cè)腴T的兄弟推薦一個新手也能上手的刷題網(wǎng)站:

LeetCode: https://leetcode-cn.com/problemset/all/


一、先了解 scanf 在緩沖區(qū)獲取數(shù)據(jù)的一些問題

鍵盤輸入的信息暫存在緩沖區(qū),scanf 在緩沖區(qū)中獲取信息(再存到相應(yīng)變量中)

1、scanf 不會拿緩沖區(qū)里的

但是當(dāng)我們輸入完一串?dāng)?shù)據(jù)(如123456)后會按下回車鍵,在緩沖區(qū)就會變成:123456\n ,按下回車鍵的與此同時 scanf 也開始從緩沖區(qū)中獲取數(shù)據(jù)(拿數(shù)據(jù)),待 scanf 拿完數(shù)據(jù)后,緩沖區(qū)會剩下 \n 。先了解此一原則

2、scanf 只會拿空格前的數(shù)據(jù)

etc. char arr[20]={0};

scanf("%s",arr);

這時運(yùn)行起來,我們在控制臺輸入:123456 abc //注意有空格

回車后緩沖區(qū)立馬出現(xiàn) :123456 abc\n ,隨即 scanf 從中獲取數(shù)據(jù)(拿數(shù))

剩下的是: abc\n //左側(cè) abc\n 前的下劃線表示空格

二、了解 getchar 在緩沖區(qū)獲取數(shù)據(jù)的一些問題

getchar ( ) 會直接從緩沖區(qū)中獲取數(shù)據(jù),并且只拿一個字符,這是緩沖區(qū)里有數(shù)據(jù)的情況;如果緩沖區(qū)中沒數(shù)據(jù),getchar 就會等待

第二點雖然少,但是要求理解(這當(dāng)然不是理由)

三、所以當(dāng) scanf 和 getchar 用在一起會出現(xiàn)一些易出錯的問題

當(dāng) scanf 剛?cè)⊥曛岛?,后面沒清空緩沖區(qū)直接用 getchar ( ) 獲取我們新輸入的字符,這時 getchar 獲取了緩沖區(qū)原有的一個字符后不再獲取,獲取的不是我們輸入的字符

etc. (沒有清空緩沖區(qū)的錯誤例子)

char arr [20] = {0};

printf("輸入密碼:")

scanf("%s", arr);

printf("確認(rèn)密碼(T / F):")

int a = getchar ();

if (a = ' T ')

{

printf("密碼正確");

}

else

{

printf("密碼錯誤");

}

運(yùn)行起來發(fā)現(xiàn)不管輸入什么都直接是密碼錯誤:

四、解決辦法

既然是沒有清空緩沖區(qū)而出現(xiàn)的問題,那就清空緩沖區(qū)

用 getchar () 來取雖然一個 getchar 只取一個,那就用 while 讓它一直取到空位置

在 scanf 取完數(shù)后加入一個 while 循環(huán):

int empty = 0; ??????????????????????????????????//先定義一個常量

while( ( empty=getchar() ) != ' \n ' )

{

getchar(); ????????????????????????????????????????//這樣這里的 getchar 在緩沖區(qū)取的數(shù)就會被忽略

} ??????????????????????????????????????????????????????//也不儲存在empty中(被扔掉)

運(yùn)行結(jié)果:


獻(xiàn)給新手的其他文章目錄(希望對你有所幫助)
一、【C語言】初學(xué)者寫基礎(chǔ)代碼的基本步驟_Meiyourou.c的博客-博客_如何開始寫代碼二、關(guān)于scanf,局部與全局變量的理解_Meiyourou.c的博客-博客三、【C語言】生命周期和作用域_Meiyourou.c的博客-博客_c語言生命周期四、【C語言】字符串及求字符串的長度_Meiyourou.c的博客-博客五、【C語言】條件操作符,逗號操作符,操作符 ( ) 、[ ]_Meiyourou.c的博客-博客六、【C語言】操作符 ~ ,二進(jìn)制位按位取反_Meiyourou.c的博客-博客七、【C語言】static_Meiyourou.c的博客-博客八、【C語言】轉(zhuǎn)義字符_Meiyourou.c的博客-博客九、【C語言】if 語句的相關(guān)內(nèi)容_Meiyourou.c的博客-博客十、【C語言】 switch 分支語句_Meiyourou.c的博客-博客


最后的最后,送大家一句話:

諸位不免摘一朵野花,更比夕陽......

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


本文標(biāo)題:【C語言】使用getchar與scanf出現(xiàn)的一些問題-創(chuàng)新互聯(lián)
文章出自:http://weahome.cn/article/djseid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部