當前位置:
首頁 > 知識 > 每天學點C語言-如何使用scanf讀取任何輸入

每天學點C語言-如何使用scanf讀取任何輸入

從美好的心情開始

1、使用scanf()

c函數庫中包含了多個輸入函數,scanf()是其中最常用的一個,因為 它可以讀取各種格式的數據。

從鍵盤輸入的是文件 ,因為那些鍵生成文本字元:字母、數字和標點。

想要一起學習C++的可以加裙四五三二四三二八零,裙內有各種資料滿足大家,歡迎加裙

scanf()把輸入的字元串轉換成各種形式:整數、浮點數、字元和C的字元串。它是printf()函數的逆操作。後者把整數、浮點數、字元和C的字元串轉換成要在屏幕上顯示的文本。

跟printf()一樣,scanf()使用控制字元串和參數列表。控制字元串指出輸入將被轉換成的格式,主要區別是在參數列表中。printf()函數使用變數名、常量和表達式。而scanf()函數使用指向變數的指針。不必對指針有任何了解,只需要記住這些簡單規則:

*如果使用scanf()來讀取某種基本變數類型的值,請在變數名之前加上一個&。

* 如果使用scanf() 把一個字元串讀進一個字元數組中,請不要使用&。

scanf()函數使用空格(換行、製表符和空格)來決定怎麼把輸入分成幾個欄位。它依次把轉換說明與欄位相匹配,並且跳過它們之間的空格 。惟一的例外是%c說明,即使下一個字元是空白字元,它也會讀取那個字元。

scanf()函數與prinft()函數所使用的轉換說明符幾乎完全相同。主要的區別在於printf()把%f %e %E %g %G同時用於float類型和double類型,而scanf()只把它們用於float類型,而用於double類型時要求使用「l」修飾符。

一、從scanf()角度看輸入

假定您使用了一個%d說明符來讀取一個整數。scanf()函數開始每次讀取一個輸入字元,它跳過空白字元(空格、製表符和換行符)直到遇到一個非空白字元。因為它試圖讀取一個整數,所以scanf()期望發現一個數字字元或者一個符號(+或-)。如果它發現了一個數字或一個符號,那麼它就保存之並讀取下一個字元;就這樣,scanf()持續讀取和保存字元直到它遇到一個非數字的字元。如果遇到了一個非數字的字元,它就得出結論:它已經講到了整數的尾部。scanf()把這個非數字字元放回輸入。這就意味著程序下一次開始讀取輸入時,它將從前面被放棄的那個非數字字元開始。最後,scanf()計算它讀取到的數字的相應數值,並將該值放到指定的變數中。

如果您使用了欄位寬度,那麼scanf()在欄位結尾或者在第一個空白字元處(二者中最先到達的一個)終止。

如果要第一個非空白字元不是數字,比如是A而非一個數字?scanf()會停在那裡,並把A(或者不管什麼)放回輸入。沒有把任何值賦給指定變數,程序下一次讀取輸入時,它就在A處重新開始。ANSIC要求函數在第一個出錯的地方停止讀取輸入。

如果使用%S說明符,那麼空白字元以後的所有字元都是可以接受的,所在scanf()跳過空白字元直到遇到第一個非空白字元,然後保存再次遇到空白字元之前的所有非空白字元。

不能通過欄位寬度使得scanf()用一個%S說明符讀取多於一個字的輸入。

最後一點,當scanf()把字元串放在一個指定的數組中時,它添加終止的""使用數組內容成為一個C的字元串。

如果使用%C說明符,那麼所有的輸入字元都是平等的。如果下一個字元是一個空格或者換行符,將會把這個空格或換行符賦給指定的變數;不會跳過空白字元。

二、格式字元串中的常規字元

scanf()函數允許您把普通字元放在格式字元串中。除了空格字元之外的普通字元一定要與輸入字元串準確匹配。

格式字元串中的空格意味著跳過下一個輸入項之前的任何空格。請注意,任何空格的概念,包括沒有空格的特殊情況。

除了%C以外的說明符會自動跳過輸入項之前的空格。

對於%C來說,向格式字元串中添加一個空格將導致一些區別。

例如,如果在格式字元串中%C之前有一個空格,那麼scanf()會跳到第一個非空白字元處。也就是說scanf("%C",&ch)會讀取輸入中遇到的第一個字元,而scanf(" %C",&ch)則讀取遇到的第一個非空白字元。

三、scanf()的返回值

scanf()函數返回成功讀入的項目的個數。

如果它沒有讀取任何項目,scanf()會返回值0.當它檢測到「文件結尾」時,它返回EOF。

2、printf()和scanf()的*修飾符

printf()和scanf()都可以使用*修飾符來修飾說明符的意義,但是它們的方式不同。

首先看看*修飾符能為pritf()做什麼。假定您不想事先把定欄位寬度,而是希望由程序來指定該值,那麼您可以在欄位寬度部分使用*代替數字來達到目的,但是您也必須使用一個參數來告訴函數欄位寬度應該是什麼。也就是說,如果轉換說明符是%*d,那麼參數列表中應該包含一個*值和一個d值。該技術也可以和浮點值一起使用來指定精度和欄位寬度。

程序清單 varwid.c程序

在scanf()中,*提供截然不同的服務。當把它放在%和說明符字母之間時,它使函數跳過相應的輸入項目。

程序清單 skip2.c

如果程序需要讀取一個文件中某個特定的列,那麼該功能將非常有用。

3、 printf()的用法提示

可以通過指定足夠大的固定欄位寬度使輸出更加整齊清晰。

在兩個轉換說明符之間放一個空白字元,可以確保即使一個數字溢出了自己的欄位,也不會闖入下一個數字一起輸出。這是因為控制字元串中的常規字元(包括空格)會被打

印出來。

如果語句中要嵌入一個數字,那麼指定一個和期望的數字寬度同樣小或更小的欄位寬度通常會比較方便。這使得數字的寬度正合適,而無需不必要的空白符。

想要一起學習C++的可以加裙四五三二四三二八零,裙內有各種資料滿足大家,歡迎加裙

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 C加加 的精彩文章:

C語言 圖形界面——實現貪吃蛇遊戲

TAG:C加加 |

您可能感興趣

Git config 使用說明
如何使用react-redux-form填充動態默認值
如何使用Python獲取用戶的輸入
什麼時候使用 CountDownLatch
如何在Linux上禁止任何人使用su命令成為root
如何使用TensorFlow中的Dataset API
在 Scale Up 中使用 Health Check-每天5分鐘玩轉 Docker 容器技術
Spring Cloud Feign使用筆記
如果Facebook告訴你 你的數據被Cambridge Analytica使用
如何讓您的舊iPhone儘可能長時間運行-使用SparkleComm的IOS用戶注意啦
如何使用Hex-Rays API有效解決問題
如何使用curl調試openstack的api
iOS 代碼使用 C+的zero-cost abstraction 特性
三星s9+要如何使用typec耳機?
Aimtastic遊戲使用方法 Aimtastic如何設置倍鏡
調研:逾半數合作媒體不再使用 Facebook Instant Articles
Bose QuietComfort35 II 無線耳機使用體驗
如何在微服務或Tomcat中配置使用Listener
jQuery UI 為什麼使用部件庫(Widget Factory)
Windows上如何同時使用Python2和3