C連載22-scanf轉換說明中的修飾符

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;
}

22.1

3、源碼:

相關文章
相關標籤/搜索