目录
int printf("const char *format", ... );
vim编辑器补充拓展
在命令模式下输入 "SHIF"+"V" 进入visual block模式,可以通过光标选中不同行;在命令模式下输入 "CTRL"+"V" 同样可以进入visual block模式,但区别是可以通过光标对单独的列进行选中。
数据输入和输出
输入:从输入设备到计算机内存
输出:从计算机内存到输出设备
实现输入输出功能需要使用到标准输入输出库(stdio.h)中的函数。
库中提供的几个用于输入输出的函数:
//用于获取和打印单个字符
getchar()
putchar()
//用于获取和打印字符串
gets()
puts()
//用于格式化获取和输出内容
scanf()
printf()
getchar/putchar
int getchar(void);
getchar函数具有返回值,其值为获取到的字符的ascii码值。可以利用返回值对变量进行赋值:
int ret;
ret = getchar();
int putchar(int a);
putchat函数同样具有返回值,其值为输出的字符的ascii码值;若输出失败,返回值为 -1.
scanf/printf
int printf("const char *format", ... );
printf函数有返回值,其值内容为输出的数据的个数。
printf函数的形式参数分为两部分:
双引号中的const char *format为格式控制字符串;省略号部分为输出参数列表。
int printf("格式控制字符串",输出参数列表);
格式控制字符串
格式控制字符串对输出内容的格式进行约束。其中的普通字符直接原样输出,占位符则需要与输出参数列表进行匹配。
对于整型变量有多种占位符可供使用:%d(转换为有符号十进制形式)、%u(转换为无符号十进形式)、%o(转换为八进制形式)、%x(转换为十六进制形式)、%X(转换为大写十六进制形式)。
printf("a = %d , b = %u , c = %o , d = %x",-1,-1,-1,-1);
//输出结果
a = -1 , b = 4294967295 , c = 37777777777 , d = ffffffff
对于浮点型变量占位符有三种形式:%f(转换为十进制小数形式,默认保留六位小数)、%e(转换为科学计数法形式)、%g(转换为简洁形式,省略无意义的零)。
printf("a = %f , b = %e , c = %g",12.34,12.34,12.34);
//输出结果
a = 12.340000 , b = 1.234000e+01 , c = 12.34
对于字符型变量,占位符主要有两种形式:%c(转换为字符形式)和%s(转换为字符串形式)。
在格式控制字符中,占位符起到了主要的控制格式的作用。其中辅助控制符也发挥了重要作用
printf("x = K%M.Nxxx",xxx);
辅助控制符有以下形式:
#:出现在%后的井号#表示将输出内容以特殊进制形式显示,如:%#x将内容转换为十六进制;%#o将内容转换为八进制。
printf("%#x , %#o\n",10,10);
//输出内容
0xa , 012
M:占位符中的整数M代表输出的内容的宽度,若输出内容宽度大于整数M,按照实际宽度进行显示;若宽度小于整数M,则显示内容向右对齐,在空位补空格。
-M:类似于辅助控制符M,-M表示显示内容左对齐,空位补空格。
0M:显示内容右对齐,在空位补0。
注意!
没有 "-0M"形式的辅助控制符。(左对齐,空位补零会影响数值大小)
printf("%4d , %04d , %-4d\n",2,2,2);
//输出内容
2 , 0002 , 2
N:跟在小数点后的整数N表示显示内容保留N位。
printf("%.3f , %.3e , %.3s",12.3456,12.3456,"abcdef");
//输出内容
12.346 , 1.235e+01 , abc
K:转换为对应数据类型的格式,l(long)、ll(long long)、h(half)、hh(half half)。
输出参数列表
输出参数列表按照从左向右的顺序进行匹配,若格式说明符数量小于参数数量没有被匹配的参数被忽略,若格式说明符数量大于参数数量,则缺少匹配的格式说明符对应随机值。
printf("%d %d %d\n",1,2,3);
printf("%d %d %d\n",1,2);
//输出内容
1 2 3
1 2 0
int scanf(const char* restrict format, ...);
int scanf("格式控制字符串",地址列表);
scanf函数有返回值,其值内容为输入的数据的个数。
scanf函数也有辅助控制符部分,相比printf函数,内容较少但更为复杂
辅助控制符
scanf("%MK",xxx);
M:控制输入数据的宽度,超出宽度的部分被忽略。
K:控制输入数据的精度,有以下几种形式
%f(float类型)、%lf(double类型)、%Lf(long double类型)、%ld(long类型)、%lld(long long 类型)。
需要注意的是,scanf函数格式控制字符中尽量不要出现普通字符,当出现普通字符时,只有输入与普通字符匹配才能获取格式说明符匹配的数据。
scanf("abc%d",&a);
printf("%d\n",a);
//输入:1234\n
//输出结果:32767
//输入:abc5\n
//输出结果:5
scanf函数中的空白符:空格、制表符、回车
在输入时遇到空白符,匹配结束;输入与格式不匹配,即非法字符,匹配结束;输入超过指定长度,匹配结束。
scanf("%d",&a);
printf("a = %d\n",a);
//输入:w\n
//输出内容:a = 32767
scanf("%c%d",&a,&b);
printf("a = %c\nb = %d\n",a,b);
//输入:w[space]w\n
//输出结果:
a = w
b = 32764
scanf("%3d",&a);
printf("a = %d\n",a);
//输入:12345
//输出结果:a = 123
注意!
在格式控制字符中出现空白符,表示此处可以输入多个空白符,但不会将数据传入任何一个变量中。
%*c表示在输入中匹配一个数据,但该数据不产生作用。