C语言printf与scanf扩展篇
printf
printf转换说明
转换说明 输出
%a,%A: 浮点数,十六进制数与p记数法(P记数法)
%c: 单个字符
%d: 有符号十进制整数
%e,%E: 浮点数,e记数法(E记数法)
%f: 浮点数,十进制记数法
%g,%G: 自动选择%e(%E),%f。%e(%E)格式用于指数小于-4或者大于等于精度时
%i: 与%d相同
%o: 无符号八进制整数
%p: 指针
%s: 字符串
%u: 无符号十进制整数
%x,%X: 无符号十六进制整数,适用十六进制数0f(0F)
%%: 打印一个%
%i和%d的相同之处可以追溯到C语言的历史。最初,%d用于打印有符号十进制整数,而%i用于打印无符号或有符号的十进制整数。然而,从实际应用角度来看,很少需要打印无符号十进制整数。因此,在实践中,%d逐渐成为打印无符号和有符号十进制整数的通用转换说明符,而%i则被视为%d的一个别名。
printf修饰符
修饰符 含义
标记: 共+,-,空格,#,0五种,可以一起使用或者不使用
数字: 最小字段宽度超出的话系统会自动使用更大的宽度
.数字: 精度
h,hh,j,l,ll,L,t,z: 和转换说明一起使用
*: 抑制字符
printf中*用法
int main ()
{
int a,b;
int n=256;
double w=242.5;
scanf(“%d”,&a);
printf(“n=%d\n”,a,n);
scanf(“%d %d”,&a,&b);
printf(“w=%.*lf\n”,a,b,w);
return 0;
}
输入
6//意思宽度为6
输出
n=空3格256
输入
8 3//意思宽度为8,保留三位小数
输出
w=空一格242.500
printf中的标记
标记 含义
-: 左对齐,从左侧开始打印
+: 用于有符号值显示符号,例“%+6.2f”
空格: 有符号为正则不显示符号,为负则显示处负号
#: 把结果转换为另一种形式。如%o则以0开始,%x,%X从0x,0X开始,对于所有浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g,%G格式,防止后面的0被删除
0: 对于数值格式,用前导0代替空格填补字段宽度。对于整数格式,如果出现-标记或者指定精度,则忽略该标记
printf多种打印方式
1
printf(“1”);
printf(“23\n”);
2
printf(“1
23\n”);
3
printf(“1”
“23\n”);
scanf
scanf的转换说明
转换说明 含义
%c: 把输入解释成字符
%d,%i: 把输入解释成有符号十进制整数
%e,%E,%f,%F,%g,%G,%a,%A: 把输入解释成浮点数
%o: 把输入解释成有符号八进制整数
%p: 把输入解释成指针
%s: 把输入解释成字符串
%u: 把输入解释成无符号十进制整数
%X,%x: 把输入解释成有符号十六进制整数
scanf中修饰符
修饰符 含义
*: 抑制字符
数字: 最大字段宽度,例如%5s
hh,ll,h,l,L: 类型读取,例如%hd
z,j,t: j表示intmax_t或者uintmax_t类型,z表示sizeof返回类型,t表示两个指针差值的类型
scanf中抑制字符使用
#include<stdio.h>
int main ()
{
int n;
scanf(“%*d %*d %d”,&n);
printf(“%d\n”,n);
return 0;
}
输入
6 7 8
输出
8
常用scanf输入扩展
1.接受空格
char ch[100];
scanf(“%[^\n]”,ch);
puts(ch);
2.scanf输入格式要对应
int a,b,c;
scanf(“%d %d %d”,&a,&b,&c);
3.限定宽度
int a,b,c;
scanf(“%4d%4d%4d”,&a,&b,&c);
printf(“%d %d %d\n”,a,b,c);
4.屏蔽数据类型
%*d屏蔽数字,%*c屏蔽字符
char arr[100];
scanf(“%*d%s”,arr);//先输数字再输字符
printf(“%s”,arr);
5.精确屏蔽
char ch[100];
scanf(“%[1-9]”,ch);//先输数字1-9再输其他,屏蔽其他
scanf(“%[^1-9]”,ch);//先输其他再输数字,屏蔽数字1-9
puts(ch);
6.屏蔽一个区间内的
char ch;
scanf(“%*[a-zA-Z]%s”,ch);//先输字母再输其他,屏蔽前面的字母
puts(ch);
printf(“%c\n”,ch);

