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

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

3天內不再提示

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

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2021-09-24 16:45 ? 次閱讀
在寫C代碼時難免對一些知識點不熟悉,導致犯錯,今天分享幾點小知識給大家。

空白符問題

#include
int main(void){  int a;  printf("input the data ");  scanf("%d ",&a);  //這里多了一個回車符  printf("%d",a);  return 0;}

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

原因用空白符結尾時,scanf會跳過空白符去讀下一個字符,所以你必須再輸入一個數。這里的空白符包括空格,制表符,換行符,回車符和換頁符。所以如果你用scanf("%d ",&a)也會出現同樣的問題。解決方法這種錯誤大多是輸入的時候不小心,多注意一點就好了。這種問題也不好檢查,編譯沒有問題,一個空格也不容易看出來。當你的程序出現上面的問題時,自己對照檢查一下就可以了。

回車符也占位

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

如果輸入:

abc

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

原因

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

解決方法

1.不輸入回車符,直接輸入字符。 2.用gets()函數,如:
#includemain(){    char c[5]; gets(c); printf(c); return 0;}

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

在某度見到的問題:

#includemain(){ 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語句,直接輸出為:

123t

原因

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

解決方法

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

比如:

#include  main(){ int a=123,b; while(scanf("%d%d",&a,&b)!=2)  fflush(stdin); printf("%d %d ",a,b); return 0;}

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

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

    關注

    180

    文章

    7595

    瀏覽量

    135923
  • 函數
    +關注

    關注

    3

    文章

    4286

    瀏覽量

    62335
  • 代碼
    +關注

    關注

    30

    文章

    4727

    瀏覽量

    68248
  • 編譯
    +關注

    關注

    0

    文章

    649

    瀏覽量

    32776

原文標題:C語言中scanf函數的常見問題

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中的socket編程基礎

    數據 步驟6:關閉socket 創(chuàng)建socket 在C語言中,創(chuàng)建socket需要使用socket()函數。這個函數需要兩個參數:域
    的頭像 發(fā)表于 11-01 16:51 ?212次閱讀

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

    如何解決C語言中的“訪問權限沖突”異常?C語言引發(fā)異常原因分析? 在C語言中,訪問權限沖突異常通
    的頭像 發(fā)表于 01-12 16:03 ?4802次閱讀

    C語言中結構體能不能相加

    C語言中,結構體能不能相加?
    的頭像 發(fā)表于 12-19 17:04 ?1194次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>結構體能不能相加

    如何給C語言中函數定義兩個不同的名字?

    最近有位哥問我,如何給C語言中函數定義兩個不同的名字?就是這兩個名字都是指向同一個函數,同一個地址,而且兩個名字都可以當做函數來用的那種。
    的頭像 發(fā)表于 12-19 16:21 ?716次閱讀

    c語言中decimal的含義

    C語言中的“decimal”是一種數據類型,用于表示十進制數字。在C語言中,常用的數據類型有整數類型(int)、浮點類型(float和double)、字符類型(char)等,而deci
    的頭像 發(fā)表于 11-30 10:57 ?2235次閱讀

    c語言中函數函數體用什么符號括起來

    知道函數是數學里的重要組成部分,數學中我們常見函數的概念,但是你了解C語言中函數嗎?其實
    的頭像 發(fā)表于 11-24 15:52 ?657次閱讀
    <b class='flag-5'>c</b><b class='flag-5'>語言中</b><b class='flag-5'>函數</b>的<b class='flag-5'>函數</b>體用什么符號括起來

    c語言中數組怎么定義

    C語言中,數組是一種用來存儲相同類型元素的數據結構。它可以存儲多個元素,并通過一個共同的名稱來引用這些元素。數組是一種很重要的數據結構,可以用于解決很多實際的問題。 在C語言中,定義數
    的頭像 發(fā)表于 11-24 10:11 ?2815次閱讀

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

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

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

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

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

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

    \0在c語言中怎么用

    C語言是一種廣泛使用的程序設計語言,具有高效、簡潔和可移植等特點。本文將詳盡介紹C語言的基本語法、數據類型、控制結構、
    的頭像 發(fā)表于 11-24 09:59 ?2976次閱讀

    scanfC語言中的作用

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

    c語言max函數在哪個庫

    C語言的max函數并不屬于標準C庫,它通常是由程序員自己編寫的一個宏定義。max函數用于比較兩個數的大小,返回較大的數值。 為了提供更多詳實
    的頭像 發(fā)表于 11-22 10:18 ?3239次閱讀

    C語言中如何實現注釋

    C語言中,注釋是用來增加代碼可讀性和注釋過程和功能的文本。C語言中支持兩種類型的注釋:單行注釋和多行注釋。 單行注釋以雙斜杠(//)開始,直到該行結束。該注釋語句可以在代碼的任何位置
    的頭像 發(fā)表于 11-22 10:17 ?1204次閱讀

    C語言常見問題

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