精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于C語言中scanf函數的3種常見問題的原因分析和解決方法

5RJg_mcuworld ? 2018-01-22 12:34 ? 次閱讀

在寫代碼時總是不小心在這里犯錯,所以特意查了一下這個函數,并且做以整理,現分享給大家。

1.空白符問題

#include

main()

{

int a;

printf("input the data ");

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

printf("%d",a);

return 0;

}

結果要輸入兩個數程序才結束,而不是預期的一個。why?

原因:用空白符結尾時,scanf會跳過空白符去讀下一個字符,所以你必須再輸入一個數。這里的空白符包括空格,制表符,換行符,回車符和換頁符。所以如果你用scanf("%d ",&a)也會出現同樣的問題。

解決方法:這種錯誤大多是輸入的時候不小心,多注意一點就好了。這種問題也不好檢查,編譯沒有問題,一個空格也不容易看出來。當你的程序出現上面的問題時,自己對照檢查一下就可以了。
基于C語言中scanf函數的3種常見問題的原因分析和解決方法

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

那么循環就會“提前”結束了。

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

解決方法:

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

2.用gets()函數,如:

#include

main()

{

char c[5];

gets(c);

printf(c);

return 0;

}

3.scanf()函數的參數輸入類型不匹配問題

這是我在百度時見到的問題,還沒遇到。拿來整理,以備日后需要。

#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;

}

當輸入a 回車 后,會直接跳過下面2個scanf語句,直接輸出為

123

t

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

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

比如:

#include

main()

{

int a=123,b;

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

fflush(stdin);

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

return 0;

}

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136192
  • 代碼
    +關注

    關注

    30

    文章

    4748

    瀏覽量

    68351

原文標題:C語言中scanf函數的3種常見問題與應對技巧

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    鴻蒙OpenHarmony:【常見編譯問題和解決方法

    常見編譯問題和解決方法
    的頭像 發表于 05-11 16:09 ?1985次閱讀

    PCB堿性蝕刻常見問題原因解決方法

    PCB堿性蝕刻常見問題原因解決方法
    發表于 08-03 10:14

    4418開發板常見問題解決方法

    這里有我們總結的一些關于4418開發板的一些常見問題和解決方法,供大家參考
    發表于 09-27 10:38

    黃菲林的使用及常見問題解決方法

    黃菲林的使用及常見問題解決方法一,前言:黃菲林是指在透明的聚脂類片材上
    發表于 04-16 20:57 ?1375次閱讀

    鍍通孔(PTH)常見問題解決方法

    鍍通孔(PTH)常見問題解決方法 (A)孔清潔調整處理   1.問題:基板進行孔清潔處理時帶出的泡沫過多,導致下工序槽液被沾污。   原因:   
    發表于 04-08 18:06 ?4210次閱讀

    HYT主機常見問題解決方法

    HYT主機常見問題解決方法 一、TC-5001、無法開機主要原因分析:CPU的7.3728管裝插件晶體容易損壞。具體改善方案:06年下半
    發表于 02-07 11:30 ?2129次閱讀

    C語言scanf函數詳解

    C語言scanf函數詳細解釋
    發表于 05-15 09:20 ?6次下載

    labview有哪些常見問題?labview三個常見問題和解決方法概述

    本文檔的主要內容詳細介紹的是labview有哪些常見問題?labview三個常見問題和解決方法概述三個常見問題是:1.labview在運行后關閉的時候出現重置vi。一直無法關閉,并且無
    發表于 09-18 18:53 ?0次下載

    剖析C語言中scanf函數常見問題

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

    C語言常見問題

    C語言常見問題
    發表于 03-21 14:57 ?0次下載

    C語言中scanf函數常見問題

    在寫C代碼時難免對一些知識點不熟悉,導致犯錯,今天分享幾點小知識給大家。
    的頭像 發表于 04-23 09:43 ?585次閱讀

    scanfC語言中的作用

    scanfC語言中的作用? scanfC語言中的輸入函數
    的頭像 發表于 11-23 14:13 ?1306次閱讀

    c語言gets函數可以輸入數字嗎

    來了解一些與輸入有關的C語言函數C語言提供了許多函數來從用戶獲取輸入,包括
    的頭像 發表于 11-24 10:00 ?1464次閱讀

    c語言scanf的正確使用及技巧

    C語言scanf函數是用來從程序的標準輸入或文件中讀取輸入的函數。它可以從鍵盤讀取用戶輸入,并將其存儲在變量中。雖然
    的頭像 發表于 11-24 10:04 ?4822次閱讀

    如何解決C語言中的“訪問權限沖突”異常?C語言引發異常原因分析

    一些措施來解決和防止其發生。本文將詳細介紹C語言中訪問權限沖突異常的原因以及解決方法。 一、訪問權限沖突異常的原因
    的頭像 發表于 01-12 16:03 ?5090次閱讀