一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于C語(yǔ)言中scanf函數(shù)的3種常見(jiàn)問(wèn)題的原因分析和解決方法

5RJg_mcuworld ? 2018-01-22 12:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在寫(xiě)代碼時(shí)總是不小心在這里犯錯(cuò),所以特意查了一下這個(gè)函數(shù),并且做以整理,現(xiàn)分享給大家。

1.空白符問(wèn)題

#include

main()

{

int a;

printf("input the data ");

scanf("%d ",&a);//這里多了一個(gè)回車符

printf("%d",a);

return 0;

}

結(jié)果要輸入兩個(gè)數(shù)程序才結(jié)束,而不是預(yù)期的一個(gè)。why?

原因:用空白符結(jié)尾時(shí),scanf會(huì)跳過(guò)空白符去讀下一個(gè)字符,所以你必須再輸入一個(gè)數(shù)。這里的空白符包括空格,制表符,換行符,回車符和換頁(yè)符。所以如果你用scanf("%d ",&a)也會(huì)出現(xiàn)同樣的問(wèn)題。

解決方法:這種錯(cuò)誤大多是輸入的時(shí)候不小心,多注意一點(diǎn)就好了。這種問(wèn)題也不好檢查,編譯沒(méi)有問(wèn)題,一個(gè)空格也不容易看出來(lái)。當(dāng)你的程序出現(xiàn)上面的問(wèn)題時(shí),自己對(duì)照檢查一下就可以了。
基于C語(yǔ)言中scanf函數(shù)的3種常見(jiàn)問(wèn)題的原因分析和解決方法

2.回車符也占位。

#include

main()

{

int n = 5;

char c[n];

for(int i = 0; i < n; i++)

c[i] = scanf("%c",&c[i]);

printf(c);

return 0;

}

如果輸入:

a

b

c

那么循環(huán)就會(huì)“提前”結(jié)束了。

原因:輸入a和第一個(gè)回車后,a和這個(gè)回車符都留在緩沖區(qū)中。第一個(gè)scanf讀取了a,但是輸入緩沖區(qū)里面還留有一個(gè) ,第二個(gè)scanf讀取這個(gè) 。然后輸入b和第二個(gè)回車,同樣的,第三個(gè)scanf讀取了b,第四個(gè)scanf讀取了第二個(gè)回車符。第五個(gè)讀取了c。所以五個(gè)scanf都執(zhí)行了,并沒(méi)有提前結(jié)束。只不過(guò)有的scanf讀取到了回車符而已。

解決方法:

1.不輸入回車符,直接輸入字符。

2.用gets()函數(shù),如:

#include

main()

{

char c[5];

gets(c);

printf(c);

return 0;

}

3.scanf()函數(shù)的參數(shù)輸入類型不匹配問(wèn)題

這是我在百度時(shí)見(jiàn)到的問(wèn)題,還沒(méi)遇到。拿來(lái)整理,以備日后需要。

#include

main()

{

int a=123;

char c='t';

printf("input ");

scanf("%d%c",&a,&c);

scanf("%d%c",&a,&c);

scanf("%d%c",&a,&c);

printf("%d %c ",a,c);

return 0;

}

當(dāng)輸入a 回車 后,會(huì)直接跳過(guò)下面2個(gè)scanf語(yǔ)句,直接輸出為

123

t

原因:對(duì)于scanf("%d%c",&a,&c),scanf語(yǔ)句執(zhí)行時(shí),其中有一個(gè)參數(shù)不匹配,那就從這個(gè)地方跳出,忽略這個(gè)scanf后面所有的參數(shù),而去執(zhí)行下一條語(yǔ)句。

解決方法:scanf()函數(shù)執(zhí)行成功時(shí)的返回值是成功讀取的變量數(shù),也就是說(shuō),你這個(gè)scanf()函數(shù)有幾個(gè)變量,如果scanf()函數(shù)全部正常讀取,它就返回幾。但這里還要注意另一個(gè)問(wèn)題,如果輸入了非法數(shù)據(jù),鍵盤緩沖區(qū)就可能還個(gè)有殘余信息問(wèn)題。

比如:

#include

main()

{

int a=123,b;

while(scanf("%d%d",&a,&b)!=2)

fflush(stdin);

printf("%d %d ",a,b);

return 0;

}

還有個(gè)辦法:只要用scanf("%[^ ]",strings); 就可以了。很神奇吧。還要注意方括號(hào)兩側(cè)都不能加空格。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141684
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70722

原文標(biāo)題:C語(yǔ)言中scanf函數(shù)的3種常見(jiàn)問(wèn)題與應(yīng)對(duì)技巧

文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙OpenHarmony:【常見(jiàn)編譯問(wèn)題和解決方法

    常見(jiàn)編譯問(wèn)題和解決方法
    的頭像 發(fā)表于 05-11 16:09 ?3705次閱讀

    PCB堿性蝕刻常見(jiàn)問(wèn)題原因解決方法

    PCB堿性蝕刻常見(jiàn)問(wèn)題原因解決方法
    發(fā)表于 08-03 10:14

    4418開(kāi)發(fā)板常見(jiàn)問(wèn)題解決方法

    這里有我們總結(jié)的一些關(guān)于4418開(kāi)發(fā)板的一些常見(jiàn)問(wèn)題和解決方法,供大家參考
    發(fā)表于 09-27 10:38

    鍍通孔(PTH)常見(jiàn)問(wèn)題解決方法

    鍍通孔(PTH)常見(jiàn)問(wèn)題解決方法 (A)孔清潔調(diào)整處理   1.問(wèn)題:基板進(jìn)行孔清潔處理時(shí)帶出的泡沫過(guò)多,導(dǎo)致下工序槽液被沾污。   原因:   
    發(fā)表于 04-08 18:06 ?4573次閱讀

    HYT主機(jī)常見(jiàn)問(wèn)題解決方法

    HYT主機(jī)常見(jiàn)問(wèn)題解決方法 一、TC-5001、無(wú)法開(kāi)機(jī)主要原因分析:CPU的7.3728管裝插件晶體容易損壞。具體改善方案:06年下半
    發(fā)表于 02-07 11:30 ?2273次閱讀

    C語(yǔ)言scanf函數(shù)詳解

    C語(yǔ)言scanf函數(shù)詳細(xì)解釋
    發(fā)表于 05-15 09:20 ?6次下載

    labview有哪些常見(jiàn)問(wèn)題?labview三個(gè)常見(jiàn)問(wèn)題和解決方法概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是labview有哪些常見(jiàn)問(wèn)題?labview三個(gè)常見(jiàn)問(wèn)題和解決方法概述三個(gè)常見(jiàn)問(wèn)題是:1.labview在運(yùn)行后關(guān)閉的時(shí)候出現(xiàn)重置vi。一直無(wú)法關(guān)閉,并且無(wú)
    發(fā)表于 09-18 18:53 ?0次下載

    剖析C語(yǔ)言中scanf函數(shù)常見(jiàn)問(wèn)題

    ; } ????結(jié)果要輸入兩個(gè) 數(shù)程序才結(jié)束,而不是預(yù)期的一個(gè)。 why? 原因 ????用空白符結(jié)尾時(shí),scanf會(huì)跳過(guò)空白符去讀下一個(gè)字符,所以你必須再輸入一個(gè)數(shù)。這里的空白符包括空格,制表符,換行符,回車符和換頁(yè)符。所以
    的頭像 發(fā)表于 09-24 16:45 ?1764次閱讀

    C語(yǔ)言常見(jiàn)問(wèn)題

    C語(yǔ)言常見(jiàn)問(wèn)題
    發(fā)表于 03-21 14:57 ?0次下載

    C語(yǔ)言中scanf函數(shù)常見(jiàn)問(wèn)題

    在寫(xiě)C代碼時(shí)難免對(duì)一些知識(shí)點(diǎn)不熟悉,導(dǎo)致犯錯(cuò),今天分享幾點(diǎn)小知識(shí)給大家。
    的頭像 發(fā)表于 04-23 09:43 ?855次閱讀

    scanfC語(yǔ)言中的作用

    scanfC語(yǔ)言中的作用? scanfC語(yǔ)言中的輸入函數(shù)
    的頭像 發(fā)表于 11-23 14:13 ?2170次閱讀

    c語(yǔ)言gets函數(shù)可以輸入數(shù)字嗎

    來(lái)了解一些與輸入有關(guān)的C語(yǔ)言函數(shù)。C語(yǔ)言提供了許多函數(shù)來(lái)從用戶獲取輸入,包括
    的頭像 發(fā)表于 11-24 10:00 ?2041次閱讀

    c語(yǔ)言scanf的正確使用及技巧

    C語(yǔ)言scanf函數(shù)是用來(lái)從程序的標(biāo)準(zhǔn)輸入或文件中讀取輸入的函數(shù)。它可以從鍵盤讀取用戶輸入,并將其存儲(chǔ)在變量中。雖然
    的頭像 發(fā)表于 11-24 10:04 ?6015次閱讀

    如何解決C語(yǔ)言中的“訪問(wèn)權(quán)限沖突”異常?C語(yǔ)言引發(fā)異常原因分析

    一些措施來(lái)解決和防止其發(fā)生。本文將詳細(xì)介紹C語(yǔ)言中訪問(wèn)權(quán)限沖突異常的原因以及解決方法。 一、訪問(wèn)權(quán)限沖突異常的原因
    的頭像 發(fā)表于 01-12 16:03 ?7117次閱讀

    電子焊接的常見(jiàn)問(wèn)題解決方法

    電子焊接是電子組裝過(guò)程中的關(guān)鍵步驟,焊接質(zhì)量的好壞直接影響電子產(chǎn)品的性能和可靠性。在電子焊接過(guò)程中,經(jīng)常會(huì)遇到一些常見(jiàn)問(wèn)題,掌握其解決方法對(duì)于提高焊接質(zhì)量具有重要意義。以下是幾種常見(jiàn)的電子焊接
    的頭像 發(fā)表于 01-09 10:28 ?1186次閱讀