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

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

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

C語言中scanf函數(shù)的常見問題

單片機(jī)與嵌入式 ? 來源:單片機(jī)與嵌入式 ? 2023-04-23 09:43 ? 次閱讀

在寫C代碼時(shí)難免對(duì)一些知識(shí)點(diǎn)不熟悉,導(dǎo)致犯錯(cuò),今天分享幾點(diǎn)小知識(shí)給大家。

空白符問題

#include


int main(void)
{
  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ì)跳過空白符去讀下一個(gè)字符,所以你必須再輸入一個(gè)數(shù)。這里的空白符包括空格,制表符,換行符,回車符和換頁符。所以如果你用scanf("%d ",&a)也會(huì)出現(xiàn)同樣的問題。

解決方法

這種錯(cuò)誤大多是輸入的時(shí)候不小心,多注意一點(diǎn)就好了。這種問題也不好檢查,編譯沒有問題,一個(gè)空格也不容易看出來。當(dāng)你的程序出現(xiàn)上面的問題時(shí),自己對(duì)照檢查一下就可以了。


回車符也占位

#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í)行了,并沒有提前結(jié)束。只不過有的scanf讀取到了回車符而已。

解決方法

1.不輸入回車符,直接輸入字符。 2.用gets()函數(shù),如:

#include
main()
{   
 char c[5];
 gets(c);
 printf(c);
 return 0;
}

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

在某度見到的問題:

#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ì)直接跳過下面2個(gè)scanf語句,直接輸出為:

123
t

原因

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

解決方法

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

比如:

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

    關(guān)注

    180

    文章

    7595

    瀏覽量

    135920
  • 程序
    +關(guān)注

    關(guān)注

    116

    文章

    3766

    瀏覽量

    80763
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4286

    瀏覽量

    62335
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    649

    瀏覽量

    32776
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    14271

原文標(biāo)題:C語言中scanf函數(shù)的常見問題

文章出處:【微信號(hào):單片機(jī)與嵌入式,微信公眾號(hào):單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言中指針函數(shù)函數(shù)指針的概念及應(yīng)用示例

    C語言中,指針函數(shù)函數(shù)指針是強(qiáng)大且常用的工具。它們允許我們以更靈活的方式處理函數(shù)和數(shù)據(jù),進(jìn)而擴(kuò)展程序的功能。
    發(fā)表于 08-16 16:14 ?694次閱讀

    C語言中函數(shù)的基本知識(shí)

    函數(shù)C語言中的基本構(gòu)建塊之一,它允許我們將代碼組織成可重用、模塊化的單元。
    發(fā)表于 08-16 18:25 ?502次閱讀

    C語言常見問題

    C語言常見問題集,即C-FAQ。
    發(fā)表于 07-09 08:40

    C語言常見問題

    C語言常見問題匯總大集合
    發(fā)表于 05-10 21:37

    C語言常見問題!

    C語言常見問題!
    發(fā)表于 05-26 11:53

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

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

    基于495個(gè)C語言常見問題

    基于495個(gè)C語言常見問題
    發(fā)表于 10-13 10:18 ?2次下載
    基于495個(gè)<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>常見問題</b>集

    printf和scanf什么意思

    printf()函數(shù)是格式化輸出函數(shù), 一般用于向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息。scanf()是C語言中的一個(gè)輸入
    發(fā)表于 11-09 18:02 ?3.8w次閱讀
    printf和<b class='flag-5'>scanf</b>什么意思

    剖析C語言中scanf函數(shù)常見問題

    在寫C代碼時(shí)難免對(duì)一些知識(shí)點(diǎn)不熟悉,導(dǎo)致犯錯(cuò),今天分享幾點(diǎn)小知識(shí)給大家。 空白符問題 ? ? ? ? ? ? ? ? ? ? # include stdio.h int main ( void
    的頭像 發(fā)表于 09-24 16:45 ?1547次閱讀

    C語言常見問題

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

    C語言常見問題

    電子發(fā)燒友網(wǎng)站提供《C語言常見問題集.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:29 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>常見問題</b>集

    scanfC語言中的作用

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

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

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

    c語言怎么用scanf輸入字符串

    C語言中,我們可以使用scanf函數(shù)來接收用戶的輸入。scanf函數(shù)有很多種用法,其中一種用法
    的頭像 發(fā)表于 11-24 10:03 ?2479次閱讀

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

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