C語言格式化之scanf


1.       格式輸入函數的一般形式

函數功能:用於接收從鍵盤上輸入的數據,輸入的數據可以是整型、實型和字符型等。

一般形式:scanf(“格式控制字符串”,變量地址列表);

 

格式控制字符串:用於控制輸入數據格式,必須以引號引導,內容由一個或多個格式控制字符組合而成,也可以含有非格式控制字符,非格式控制字符稱為普通字符。普通字符按原樣在對應位置輸入。

變量地址列表:用於指定存放數據的變量地址。如果需要給多個變量輸入數據,則各變量地址要用逗號隔開。變量地址表示方式是:&變量名。例如,&a表示變量a的地址。

2.       格式控制

格式控制由格式控制字符串實現。格式控制字符串由格式字符和普通字符兩部分組成。

(1)       格式字符

格式字符串形式為:%【*】【width】【F|N】【h|l】type

與printf函數的格式符有相同之處,也有不同之處。

1*為輸入賦值抑制字符,表示該格式說明要求輸入數據,但不賦值,也即在地址列表中沒有相應的地址項,例如:

scanf(“%3d%*5d%f”,&a,&x);

如果執行時輸入:

2001200 4.1

則200傳給a,4.1傳給x,1200不賦給任何變量。

2width為寬度指示符,表示該輸入項最多可輸入的字符個數。如遇空格或不可轉換的字符,讀入的字符將減少,例如:

scanf(“%3d%5d%f”,&a,&x);

如果執行時輸入:

2001200 4.1

則200傳給a,1200傳給b,4.1傳給x。

“%3d”控制第一個數據只取3個字符轉換成整型數200;“%5d”控制第二個數據,但從輸入流中截取4個字符后,遇到空格,因此第二個數據只得到了4位數。

(2)       普通字符

與printf函數的普通字符不同,scanf的格式控制字符串中普通字符是不顯示的,而是規定了輸入時必須輸入的字符,例如:

scanf(“i=%d”,&i);

執行該語句時,輸入應按下列格式:

i=30

運行語句:

scanf(“%d,%f”,&a,&x);

輸入格式應為:

10,0.3

“%d,%f”說明輸入一個整型數和一個浮點數之間要輸入一個逗號。

3.       地址列表

地址是由若干個地址組成的列表,可以是變量的地址、字符串的首地址、指針變量等,各地址間以逗號間隔。

格式輸入函數執行結果是將鍵盤輸入的數據流按格式轉換成數據,存入與格式相對應的地址指向的存儲單元中。

注意事項:

1.       對unsigned型變量的輸入格式,可以用%u、%d、%o或%x格式。

2.       在用scanf函數對變量進行賦值時,一般不使用域寬m對格式進行修飾,以免發生錯誤。

對於%d格式,如果指定了域寬,則從鍵盤上輸入數據時,數據之間不加分隔符(如空格等),由系統按給定的域寬自動截取數據。

3.       如果在%后面、格式字符前面加上一個“*”附加說明符,表示跳過該輸入,輸入的數據不放入變量中。

4.       使用scanf函數對實型變量賦值時,在格式%f中加入域寬修飾符,其中小數點算一個域寬。

5.       使用scanf函數對實型變量進行賦值時,在格式%f中不得控制小數位的精度,但在printf函數中可以使用,並且經常使用。

6.       Scanf函數的“格式控制字符串”中一般不使用轉義字符,否則要按原樣在對應位置從鍵盤輸入,為輸入數據帶來不必要的麻煩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM