资料来源:13.1-1 格式化输入输出_哔哩哔哩_bilibili
正文
一般来说,printf()和scanf()函数在使用时,不需要考虑什么东西,但有时候需要我们以某种方式来输入输出,或者在做题的时候会遇到这种问题。
格式化输出:%[flags][width][.prec][hlL]type
下面对上面参数进行解释(常见):
flag | 解释 |
+ | 强制输出加号 输出+或- |
- | 左对齐 |
space() | 用空格填充 |
0(数字0) | 用0填充 |
width与.prec | 解释 |
number | 数字(姑且这样看) |
.number | 小数点后number |
* | 用来替换一个数 |
.* | 替换小数点后一个数 |
例子:
printf("************\n");//12个*
这里打印了12个*,主要是让下面的例子看的清楚
#include<stdio.h>
int main()
{
printf("************\n");//12个*
printf("%d\n",123); // 正常打印123 %type
printf("%+d\n",123);
printf("%+d\n",-123);
return 0;
}
/*
************
123
+123
-123
*/
直接%d,就是没有格式的输出;若是%+d,只是在输出前多一个+;如果输出的是一个负数,就算加了+,也没有什么变化。
#include<stdio.h>
int main()
{
printf("************\n");//12个*
printf("%9d\n",123);
printf("% 9d\n",123);
printf("%09d\n",123);
return 0;
}
/*
************
123
123
000000123
*/
%9d和% 9d作用一样,所以一般看不到% 9d,都是用%9d,表示一共9位,不足用space填充。于此相同的是%09d,用0填充不足的位置。
#include<stdio.h>
int main()
{
printf("************\n");//12个*
printf("%9d\n",123);
printf("%-9d\n",123);
printf("%-9d",123);
printf("%d",123);
return 0;
}
/*
************
123
123
123 123
*/
与%9d不同的是,%-9d是左对齐。整数表示一共要占多少位,通常在打印浮点数时,与下面的小数用在一起。
#include<stdio.h>
int main()
{
printf("************\n");//12个*
printf("%9.2f\n",12.3);
printf("%-9.2f\n",12.3);
return 0;
}
/*
************
12.30
12.30
*/
"%9.2f\n",9.2表示的意思是一共占9位,小数点后面2位,不足前面补空格。
-9.2左靠齐
#include<stdio.h>
int main()
{
int len = 6;
int _len = 9;
printf("************\n");//12个*
printf("%*d\n",len,123);
printf("%*.*f\n",_len,len,12.3);
return 0;
}
/*
************
123
12.300000
*/
*所表达是意思也很简单,就是和上面一样,不过是控制的方式变了。
至于[hlL],是对type的修饰
hlL | |
hh | 单字节 |
h | short |
l | long |
ll | long long |
L | long double |
printf("%hhd\n",1234);
//输出-46
像这个,hh表示输出一个单字节的变量,但一个8位能表示的最大整数为01111111,即127,而1234明显超过127。所以会对1234进行处理,十进制1234在计算机中的二进制为(010011010010),取后8位,(1101 0010),-1->(1101 0001),取反->(1010 1110) = -46.
type就是类型了,不过多介绍。
格式输入:%[flags]type
至于格式输入,就很少的东西了。
#include<stdio.h>
int main()
{
int a, b;
scanf("%2d%d", &a,&b);
printf("%d %d", a, b);
}
//输入12345
//输出12 345
控制输入,只取两个数给a,其余的给下一个数。
至于其他的,这里就不介绍了。