tft每日頭條

 > 圖文

 > printf和scanf控制符

printf和scanf控制符

圖文 更新时间:2025-01-16 15:06:09

printf和scanf控制符?大家手中的電腦,手機,功能再怎麼變化,再怎麼酷炫,都會有兩個基本功能:輸入和輸出;輸入的是要處理的數據,輸出的是處理過的數據,當前這裡的數據是泛指,它可以是文本、音頻、圖片、視頻等;回到C上那就是繞不開的printf和scanf函數,回想當初剛接觸的時候,還給這兩個函數折磨一陣子,廢話不多說開始進入正題,接下來我們就來聊聊關于printf和scanf控制符?以下内容大家不妨參考一二希望能幫到您!

printf和scanf控制符(學計算機從輸入)1

printf和scanf控制符

大家手中的電腦,手機,功能再怎麼變化,再怎麼酷炫,都會有兩個基本功能:輸入和輸出;輸入的是要處理的數據,輸出的是處理過的數據,當前這裡的數據是泛指,它可以是文本、音頻、圖片、視頻等;回到C上那就是繞不開的printf和scanf函數,回想當初剛接觸的時候,還給這兩個函數折磨一陣子,廢話不多說開始進入正題。

一、簡介

頭文件stdio.h有兩個使用最頻繁的輸入和輸出的函數就是scanf和printf,原型如下:

int scanf (const char * format, ...):

根據特定的格式讀取輸入

int printf (const char * format, ...):

顯示格式串的内容,并且在該串中的指定位置插入可能的值

這兩個函數參數中都有一個格式串(format),它們用來格式化輸入和輸出。格式串包含普通字符和轉換說明,轉換說明給程序員提供了大量對輸入/輸出格式的控制方法:即它可以包含格式化信息。其中轉換說明以字符%開頭,後接一個轉換說明符(d、f、c、s等等)。轉換說明是用來表示打印過程中待填充的值的占位符或者待輸入的值的匹配格式。常用轉換說明有:%d,%f,%c,%s;

二、printf函數

printf函數格式串中的普通字符完全如在字符串中出現的那樣顯示出來,而轉換說明則要用待顯示的值來替換。另外編譯器不會檢測格式串中轉換說明的數量是否和輸出項的數量相匹配。

一般地printf轉換說明可以用%m.pX格式或%-m.pX格式,這個m和p都是整數常量,X是字母,m和p是可選的。如果省略p,m和p之間的小數點也要去掉。

轉換說明中m是表示最小字段寬度——要顯示的最少字符數量。如果要顯示的數值所需的字符數少于m,那麼值在字段内是右對齊的。如果要顯示的值所需的字符數多于m,那麼字段寬度會自動擴展為所需的尺寸。在m前放上一個負号會導緻左對齊;

轉換說明中p是表示精度,轉換說明中x表示轉換說明符;p主要依賴于轉換說明符X的選擇。X表明在顯示數值前需要對其進行哪種轉換。常用的精度(p)和轉換說明符(X)關系如下:

d:表示十進制形式的整數。p指明了待顯示的數字的最小個數,必要是在數前加上額外的0,如果省略p,則默認它的值為1。

e:表示指數(科學記數法)形式的浮點數。p指明了小數點後應該出現的數字的個數,默認值為6,如果p為0,則不顯示小數點。(科學記數法是一種記數的方法。把一個數表示成a與10的n次幂相乘的形式(1≤|a|<10,a不為分數形式,n為整數),這種記數法叫做科學記數法。 [2] 例如:19971400000000=1.99714×10^13。計算器或電腦表達10的幂是一般是用E或e,也就是1.99714E13=19971400000000。)

f:表示定點十進制形式的浮點數,沒有指數,p的含義與在說明符e中的一樣。

g:表示指數形式或者定點十進制形式的浮點數,形式的選擇根據數的大小決定。p指明了小數點後應該出現的數字的個數。與轉換說明符f不同,g的轉換将不顯示尾随的零。此外,如果要顯示的數值沒有小數點後的數字,g就不會顯示小數點。

編寫程序時無法預知數的大小或者數值變化範圍很大的時候 ,說明符g對于數的顯示是特别有用的,顯示大小适中的數時,說明符g采用定點十進制形式,顯示非常大或非常小的數時,采用指數形式以減少所需的字符數。

三、scanf函數

scanf函數格式串的轉換說明的用法和printf函數格式串中轉換說明的用法本質上基本一樣的。但是scanf函數内部機制與printf是有差别的,scanf函數本質上是一種“模式匹配”函數,試圖把輸入的字符流與轉換說明相匹配。調用時scanf函數從字符串左邊開始處理,對于格式串中的每一個轉換說明,scanf函數從輸入的數據中定位适當類型的項,并在需要時跳過空格。然後scanf讀入數據項,并且在遇到不可能屬于此項的字符時停止。如果讀入數據項成功,那麼scanf會接着處理格式串的剩餘部分。如果某一項不能成功讀入,那scanf将不再處理格式串的剩餘部分并立即返回。

scanf函數在讀入整數時,會首先尋找正号或負号,然後讀取數字直到讀到一個非數字時才停止。讀入浮點數時,也會首先尋找正号或負号,随後是一串可能含有小數點的數字或者是一個指數。指數由字母e開始、可選的符号和一個或多個數字構成。scanf中轉換說明%e,%f,%g是可以互換,在識别浮點數方面都遵循相同的規則。

當有scanf函數遇到一個不可能屬于當前項的字符時,會把此字符放回原處,以便在掃描下一個輸入項或下一次調用scanf函數時再次讀入。

在尋找數的起始位置時,scanf函數會忽略空白字符(空格符、水平和垂直制表符、換頁符、換行符)。

scanf對格式串中的普通字符處理,主要依賴于這個字符是否為空白字符。如果在格式串遇到一個或多個連續的空白字符,scanf從輸入中重複讀空白字符直到遇到一個非空白字符為止。格式串一個或多個空白字符可以與輸入中任意數量空白字符相匹配。

當在格式串中遇到非空白字符時,scanf函數将把它與下一個輸入字符進行比較。如果兩個字符相匹配,那麼scanf會放棄輸入字符而繼續處理格式串。如果兩字符不匹配,那麼scanf會把字符放回輸入中并異常退出。

綜上所述,scanf函數一般有以下幾個特性:

  1. 在使用scnf函數時,必須檢查轉換說明的數量與類型是否與輸入變量的數量與類型相匹配。
  2. 通常scanf函數的格式串隻包含轉換說明,如scanf("%d%d%f%",....);
  3. 在輸入scanf要讀取的數字時,可以放在同一行或者分散在幾行内輸入。
  4. scanf格式串不應該像printf格式串那樣常常包含很多普通字符。
四、總結

個人覺得,這兩個函數對剛接觸C的同學,學習起來會有點頭疼,雖然函數原型很簡單,但是這個格式串用法比較雜。所以要掌握這兩個函數,還是先簡單了解一下理論,再上機多實踐,好好總結一下,應該可以達到知其然并知其所以然。而我寫這篇文章就是我結合實際經驗和書本理論知識整理的筆記,如果對大家有幫助,麻煩點個贊,謝謝了。

如果想要了解更詳細的,可以參考《C語言程序設計 現代方法 第2版》這本書。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved