1、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字符串。
2、格式字符串中的普通字符
- 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;
}

3、源碼: