C連載22-scanf轉換說明中的修飾符
阿新 • • 發佈:2020-09-14
一、scanf()轉換說明中的修飾符
轉換說明 | 含義 |
---|---|
* | 抑制賦值,示例:“%*d" |
數字 | 最大欄位寬度,輸入達到最大欄位寬度處,或者第一次遇到空白字元為止,示例:"%10s" |
hh | 把整數作為signed char 或者 unsigned char 型別讀取 |
ll | 把整數作為long long或者unsigned long long型別讀取(C99),示例:"%lld"、"%llu" |
h、l或者L | "%hd"和"%hi”表明把對應的值儲存為short int型別;“%ho”、“%hx"和”%hu"表明把對應的值儲存為unsigned short int型別;"%ld"和"%li"表明把對應的值儲存為long型別;"%lo"、“lx”和“%lu”表明把對應的值儲存為unsigned long型別;“%le"、”%lf“和"%lg"表明把對應的值儲存為double型別;在e、f和g前面使用L而不是l,表明把對應的值被儲存為long double型別,如果沒有修飾符,d、i、o和x表明對應的值被儲存為int型別,f和g表明把對應的值儲存為float型別 |
j | 在整形轉換說明後面時,表明使用intmax_t或者uintmax_t型別(C99)示例:"%jd"、"%ju" |
z | 在整形轉換說明後面時,表明使用sizeof的返回型別,示例:"%zd"、”%zo" |
t | 在整形轉換說明後面時,表明使用表示兩個指標差值的型別 ,示例:"%td"、"%tx" |
- scanf()函式每次讀取一個字元,跳過所有的空白字元,直到遇到第一個非空白字元才開始讀取。
- 如果使用欄位寬度,scanf()在欄位末尾或者第一個空白字元的時候停止讀取,無法利用欄位寬度讓只有一個%s的scanf()讀取多個單詞,最後要注意一點:當scanf()把字串放進指定的陣列的時候,它會在字元序列的末尾新增上'\0',讓陣列中的內容成為一個C字串。
二、格式字串中的普通字元
- scanf()函式中允許把普通字元放到格式字串中,除了空格字元外的普通字元必須與輸入字串嚴格匹配。例如:
scanf("%d,%d",&n,&m);//該函式將其解釋成使用者將會輸入一個數字,一個逗號,然後再輸入一個逗號
scanf("%c",&ch);//從輸入的第一個字元開始讀取
scanf(" %c",&ch);//從第一個非空白字元開始讀取
#include<stdio.h> #pragma warning(disable:4996) int D22_1_varwid(void) { unsigned width, precision; int number = 256; double weight = 242.5; printf("Enter a field width:\n"); scanf("%d", &width); printf("The number is :%*d:\n", width, number); printf("Now enter a width and a precision.\n"); scanf("%d %d", &width, &precision); printf("Weight = %*.*f\n", width, precision, weight); printf("Done!\n"); return 0; }
三、原始碼:
- D22_1_varwid.c
- https://github.com/ruigege66/CPrimerPlus/blob/masterD22_1_varwid.c
- CSDN:https://blog.csdn.net/weixin_44630050
- 部落格園:https://www.cnblogs.com/ruigege0000/
- 歡迎關注微信公眾號:傅立葉變換,個人賬號,僅用於技術交流