让我们通过一个小例子进行理解,看看字段宽度在输出时的效果
#include <bits/stdc++.h>
using namespace std;
#define lz 683
int main(void)
{
printf("*%d*\n",lz);
printf("*%2d*\n",lz);
printf("*%9d*\n",lz);
printf("*%-9d*\n",lz);
}
//输出如下:
*683*
*683*
* 683*
*683 *
第1个转换说明%d不带任何修饰符,其对应的输出结果与带整数字段宽度的转换说明的输出结果相同。在默认情况下,没有任何修饰符的转换说明,就是这样的打印结果。
第2个转换说明是%2d,其对应的输出结果应该是2字段宽度。因为待打印的整数有3位数字,所以字段宽度自动扩大以符合整数的长度。
第3个转换说明是%9d,其对应的输出结果有9个空格宽度,实际上在两个星号之间有6个空格和3位数字,并且数字位于字段的右侧。
最后一个转换说明是%-9d,其对应的输出结果同样是9个空格宽度,- 标记说明打印的数字位于字段的左侧。
熟悉它们的用法后,我们就能很好地控制输出格式。
例题如下:
链接:https://ac.nowcoder.com/acm/problem/22007
来源:牛客网
题目描述
牛牛渐入佳境,他准备做一个加法模拟器来玩玩,输入两个数,分别打印这两个数的横式和竖式运算式子。
输入描述:
输入两个整数a, b 以空格隔开
0 <= a, b <= 1000
输出描述:
第一行打印横式运算式子,接下来四行打印竖式运算式子
示例1
输入
45 237
输出
45+237=282
45
+ 237
-------
282
备注:
注意printf的时候使用%xd来进行右对齐 ,x是一个数字(x未知)
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int a, b, c;
cin>>a>>b;
c=a+b;
cout<<a<<"+"<<b<<"="<<c<<endl;
printf("%7d\n+%6d\n-------\n%7d",a,b,c);//格式控制符控制数据宽度,数值型数据默认右对齐,左补空格
return 0;
}