printf
printf函数——>二进制数据——>转换规范——>字符
printf("占位符1 占位符2",替换1,替换2);
1、printf是一个变参函数
2、printf的第一个参数是字符串,是需要输出的内容
3、printf的第二及后续参数将依次替换占位符
4、占位符的类型和数量需要与后续参数一一对应
类型提升
printf是一个可变参数函数,将参数传入函数的可变参数中变量会发生自动类型提升
有符号:
char、short、int----printf函数---->int------>%d
long----printf函数---->long------>%ld
long long----printf函数----> long long------>%lld
无符号:
unsigned char、unsigned short、unsigned int----printf函数---->unsigned int------>%u
unsigned long----printf函数---->unsigned long------>%lu
unsigned long long----printf函数----> unsigned long long------>%llu
转换规范
% -+0# 12 .4 l d
-+0#:零个或多个标志字符
12 :一个可选的十进制表示的最小字段宽度
.4 :点号表示精度范围
l :长度指示符,可用:h\\hh\l\\ll\z表示
d :单个字符表示转换操作
转换操作:
c 字符类型
d 整型类型
e 双精度浮点型
E 双精度浮点型
f 双精度浮点型
o 无符号八进制整型
s 字符串
u 无符号整型
x 无符号十六进制整型
X 无符号十六进制整型
长度指示符 转换操作 二进制字节长度n
l d或i sizeof(long)
ll d或i sizeof(long long)
l u或o或x或X sizeof(unsigned long)
ll u或o或x或X sizeof(unsigned longlong)
h d或i sizeof(short)
hh d或i sizeof(char)
h u或o或x或X sizeof(unsigned short)
hh u或o或x或X size(unsigned char)
#include <stdio.h>
int main()
{
long l = 1234567890;
long long ll = 12345783248578743;
printf("%d\n",l);
printf("%d\n",ll); //输出错误
return 0;
}
#include <stdio.h>
int main()
{
unsigned int un = 0x12345678;
printf("%hX\n",un); //输出5678
printf("%hhX\n",un); //输出78
return 0;
}
.4:点号表示精度范围,后面跟着十进制整数
整数类型的转换操作,精度可以控制最小数字位数
浮点类型的转换操作,精度可以控制小数点后位数
#include <stdio.h>
int main()
{
int un = 123;
double df = 123.456789;
printf("%d.6d\n",un); //000123
printf("%f\n",df); //123.456789
printf("%.0f\n",df); //123
printf("%.4f\n",df); //123.4567
return 0;
}
12:十进制表示的最小字段宽度,如果不足用空格补足到指定的位置
#include <stdio.h>
int main()
{
int un = 1234;
double df = 123.456789;
printf("%2d\n",un); /1234 //最小宽度2位,实际4位,所有不处理
printf("%6d\n",un); / 1234 //最小宽度6位,实际4位,补2个空格
printf("%12f\n",df); / 123.456789 //最小宽度12位,实际10位,补2个空格
return 0;
}
-+0#:
使用0而不是空格作为填充字符
使用最小字段宽度,如果指定标志0,则会用0来补齐最小宽度
#include <stdio.h>
int main()
{
int n = 1234;
printf("%6d\n",n); / 1234
printf("%06d\n",n); /001234
return 0;
}
-:让字符左对齐
+:让内容总产生符号,整数用+号,负数用-号
#:八进制前加上0,十六进制前加上0X
#include <stdio.h>
int main()
{
int n = 1234;
printf("%o\n",n); //2322
printf("%X\n",n); //4D2
printf("%#o\n",n); //02322
printf("%#X\n",n); //0X4D2
return 0;
}
scanf
scanf函数——>键盘输入字符——>转换规范——>二进制
1、scanf是一个变参函数
2、scanf的第一个参数是字符串
3、scanf的第一个参数内容为匹配字符以及转换规范
4、scanf的后续参数是数据存放位置
a、如果scanf将转换后的二进制存储到基本变量当中,在变量名前加&
b、如果scanf将字符串存储到字符数组中,字符数组名不加 &
5、转换规范的写法与数量需要与后续的参数一一对应
scanf("%hhd %hd %d %ld %f %lf",&c,&s,&n,&l,&f,&df);
char short int long float double
注:scanf会将输入的字符串与第一个字符串参数进行匹配,从而找到需要转换的部分。若字符串匹配失败,将无法得到转换结果。
scanf将输入的字符串按照对应的转换规范进行转换,转换完成后的二进制,将依次存放到后续参数的变量地址中
字符和字符串
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c); /A
printf("%d %c\n",c,c); /65 A
return 0;
}
#include <stdio.h>
int main()
{
char str[10];
scanf("%s",str);
printf("%s",str);
return 0;
}