C连载22-scanf转换说明中的修饰符

一、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
#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;
}

C连载22-scanf转换说明中的修饰符_第1张图片

三、源码:

  • 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/
  • 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流
    1000

你可能感兴趣的:(C语言,c语言)