最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中scanf函數(shù)的原樣輸入的坑及解決

 更新時間:2022年07月13日 11:03:03   作者:嵌入式軟件工程師  
這篇文章主要介紹了C語言中scanf函數(shù)的原樣輸入的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

scanf函數(shù)的原樣輸入的坑及解決

scanf函數(shù)是C語言里一個輸入函數(shù),但其有很多地方需要注意:

1、scanf函數(shù)格式控制后面輸入

的應該是變量的地址而不是變量本身(即變量名)

例,輸入a,b 兩個整型變量的值的時候,很多初學者會寫成

scanf("%d %d",a,b)

這樣寫是錯的,應該寫成

scanf("%d %d",&a,&b)

2、scanf函數(shù)的輸入是有順序的

例如:

scanf(“%d %d”,&a,&b)

第一個%d是屬于a的,第二個%d是屬于b的

3、最重要的一點就是scanf切記要原樣輸入

即:

scanf(“a = %d,b = %d”,&a,&b);

輸入的是時候應該寫成“a = 1,b = 2”,記住逗號都要原樣輸入。

若是這樣的話;

scanf(“a = %d b = %d”,&a,&b);

這樣的話就要寫成“a = 1 b =2”就連空格都要原樣輸入

總之一句話,除了占位符%d,%f,%lf等之類外的其他所有東西都要原樣輸入,包括空格,逗號

4、還有一個

如果scanf("%d %d %d",&a,&b,&c);,那么這時候可以在輸入界面輸入一個再按回車再輸入下一個這樣也是可以的,也可以按照這個格式在一行中進行原樣輸入。

總之中間有空格的就用空格隔開,如果是逗號的就用逗號來隔開,如果什么都沒,即連在一塊的話就按照輸入格式輸入即可。

scanf輸入多個數(shù)據(jù)出現(xiàn)的問題

問題引出

如果使用scanf函數(shù)一次輸入多個數(shù)據(jù),只能是整型和浮點型,如果有char字符型混合輸入,就會出現(xiàn)問題:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8OJapclT-1607332110976)(Pasted%20Graphic.png)]

圖中可以看到:num3的值并沒有打印出來,出現(xiàn)這種情況的原因是什么呢???

執(zhí)行原理

讓我們先大概的過一下里面的執(zhí)行原理:

  • 在執(zhí)行scanf函數(shù)的時候,會讓用戶輸入一個數(shù)據(jù),數(shù)據(jù)輸入完畢之后,并不是將這個數(shù)據(jù)直接賦值給變量,而是先將數(shù)據(jù)存儲在緩沖區(qū),輸入的任何數(shù)據(jù)都會存儲在緩沖區(qū)中
  • 在執(zhí)行scanf函數(shù)的時候,會先檢查緩沖區(qū)中是否有數(shù)據(jù),如果緩沖區(qū)中沒有數(shù)據(jù),那么就會讓用戶從鍵盤輸入,如果緩沖區(qū)中有數(shù)據(jù),直接從緩沖區(qū)中將數(shù)據(jù)拿出來,不會讓用戶輸入數(shù)據(jù)
  • 當從緩沖區(qū)中拿數(shù)據(jù)的時候,如果要拿的數(shù)據(jù)的類型是整型或者實型,如果拿到的數(shù)據(jù)的類型是空格、回車、Tab鍵,就會被自動忽略,繼續(xù)往下拿;如果要拿的數(shù)據(jù)是字符型,不會忽略任何數(shù)據(jù)

程序分析

我們來分析下面的一段程序:程序中要求用戶輸入一個整型數(shù)據(jù)num1,但是這個時候我們偏偏輸入兩個整型數(shù)據(jù)10、20,這個時候緩沖區(qū)其實有四個數(shù)據(jù):10、空格、20、換行,執(zhí)行第一個printf后結果為10,這是我們事先預料好的;當?shù)诙€scanf執(zhí)行的時候,程序根本就不會讓用戶輸入數(shù)據(jù),因為緩沖區(qū)中已經有整型數(shù)據(jù)20了【當從緩沖區(qū)中拿數(shù)據(jù)的時候,如果要拿的數(shù)據(jù)的類型是整型或者實型,如果拿到的數(shù)據(jù)的類型是空格、回車、Tab鍵,就會被自動忽略,繼續(xù)往下拿】,所以最終程序會直接打印出num2=20

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uSu3YfSK-1607332110978)(Pasted%20Graphic%201.png)]

讓我們再回頭看第一個程序:為什么num3的值打印出來的結果為空???

執(zhí)行完第11行程序以后,緩沖區(qū)中的數(shù)據(jù)為10、空格、2.5、空格、a、換行;打印num1、num2的值的時候,因為是整型或者浮點型,程序會自動忽略空格和換行,所以輸出結果為num1=10,num2=2.500000;但是num3是一個字符型的數(shù)據(jù),程序并不會忽略任何的數(shù)據(jù),最后打印出來的結果為num3= ;【這里打印出來了一個空格,并不是空】

解決方案

那這個時候就有問題了,如果scanf輸入多個數(shù)據(jù)中包含字符型數(shù)據(jù)時,我就是想要輸出來字符型數(shù)據(jù),該怎么做呢???

解決方案:通過rewind(stdin);這行代碼把緩沖區(qū)中的數(shù)據(jù)全部清空,這個時候緩沖區(qū)中沒有任何數(shù)據(jù)了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9UNqDCfl-1607332110979)(Pasted%20Graphic%202.png)]

寫C代碼時,如果遇到整型、浮點型、字符型同時出現(xiàn)在scanf函數(shù)中的時候,要十分注意緩沖區(qū)中數(shù)據(jù)的情況??!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • QT定時器事件的實現(xiàn)示例

    QT定時器事件的實現(xiàn)示例

    本文介紹了QT定時器事件的概念和原理,闡述了其工作方式及實現(xiàn)方法,QT定時器事件可以用于在一定時間間隔內執(zhí)行特定的任務,從而實現(xiàn)定時操作和控制,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • C與C++ 無參函數(shù)的區(qū)別解析

    C與C++ 無參函數(shù)的區(qū)別解析

    在《C++ 編程思想》:“關于無參函數(shù)聲明,C與C++有很大的差別。在C語言中,聲明int fun1(),意味著一個可以有任意數(shù)目和類型的函數(shù);而在C++中,指的卻是一個沒有參數(shù)的函數(shù)”
    2013-07-07
  • C語言宏定義使用分析

    C語言宏定義使用分析

    在宏定義中,“宏名稱”和“宏字符串”是通過“空格”來區(qū)分的,某些朋友不要混淆了,接下來請祥看本文
    2012-12-12
  • C++深入探究不同的繼承體系

    C++深入探究不同的繼承體系

    繼承是C++面向對象編程中的一門。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對父類的允許訪問的方法實行的過程進行重新編寫,返回值和形參都不能改變。就是對原本的父類進行重新編寫,但是外部接口不能被重寫
    2022-05-05
  • Dijkstra算法與Prim算法的異同案例詳解

    Dijkstra算法與Prim算法的異同案例詳解

    這篇文章主要介紹了Dijkstra算法與Prim算法的異同案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • C語言三個函數(shù)的模擬實現(xiàn)詳解

    C語言三個函數(shù)的模擬實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了C語言三個函數(shù)的模擬實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言單鏈表實現(xiàn)多項式相加

    C語言單鏈表實現(xiàn)多項式相加

    這篇文章主要為大家詳細介紹了C語言單鏈表實現(xiàn)多項式相加,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C++ 構造雙向鏈表的實現(xiàn)代碼

    C++ 構造雙向鏈表的實現(xiàn)代碼

    本篇文章是對C++中構造雙向鏈表的實現(xiàn)代碼進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++11非受限聯(lián)合體的使用

    C++11非受限聯(lián)合體的使用

    本文主要介紹了C++11非受限聯(lián)合體的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 淺談C語言函數(shù)調用參數(shù)壓棧的相關問題

    淺談C語言函數(shù)調用參數(shù)壓棧的相關問題

    下面小編就為大家?guī)硪黄獪\談C語言函數(shù)調用參數(shù)壓棧的相關問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論

安化县| 根河市| 尉氏县| 通江县| 西青区| 忻州市| 桦南县| 南京市| 新巴尔虎左旗| 河北区| 武强县| 辉南县| 若羌县| 古浪县| 阳春市| 金溪县| 铜山县| 临潭县| 广东省| 唐海县| 兴宁市| 土默特右旗| 吉安市| 宿松县| 越西县| 泰兴市| 广东省| 庄浪县| 辽中县| 沂水县| 荔波县| 阿拉善左旗| 柳林县| 长泰县| 大竹县| 南涧| 内黄县| 宕昌县| 天镇县| 藁城市| 辽阳市|