控制输出长度
cout
在这个功能上比 printf
方便,且强大
目的
有些题目输出的时候,会需要控制长度,比如以下题目:
题目描述
某老师期末发成绩表的时候发现他的表格很不好看,因为没有对齐,以下为成绩表中的一部分,每行表示一个成绩,分别为学号,语文成绩,数学成绩
5 100 99
6 99 100
7 98 86
8 95 100
9 8 77
10 100 100
这时需要添加空格来让表格对齐,请你帮他对齐这些分数,id占2格,成绩都占3格,并且两两中间有空格
样例输出5 100 99
6 99 100
7 98 86
8 95 100
9 8 77
10 100 100这时我们就可以用输出控制长度的功能
cout
使用 <iomanip>
库中的 setw()
控制输出长度
语法
#include <iostream>
#include <iomanip> //需要此头文件
using namespace std;
int main(){
cout<<setw(2)<<9<<" "<<setw(3)<<8<<" "<<77<<endl;
cout<<setw(2)<<10<<" "<<setw(3)<<100<<" "<<100<<endl;
//输出
// 9 8 77 注意:77和100没有对齐
//10 100 100
return 0;
}
setw()
可以设置输出长度
- 括号里填2表示控制长度为2,当长度不足时补空格,比如9前面就有1个空格
- 括号里填3表示控制长度为3,当长度不足时补空格,比如8前面就有2个空格
setw()
仅对下一个输出数字有效如上面样例中77和100就没有对齐。
想要对齐就只有再加 setw()
// ↓增加
cout<<setw(2)<<9<<" "<<setw(3)<<9<<" "<<setw(3)<<77<<endl;
cout<<setw(2)<<10<<" "<<setw(3)<<100<<" "<<setw(3)<<100<<endl;
当长度超出设定,会怎么样
cout<<"我有"<<setw(2)<<9999<<"爬虫币";
//输出:我有9999爬虫币
这时会忽略你设置的长度,有多长就输出多长
如何左对齐
cout<<left; //左对齐left 右对齐right
cout<<setw(2)<<9<<" "<<setw(3)<<8<<" "<<77<<endl;
cout<<setw(2)<<10<<" "<<setw(3)<<100<<" "<<100<<endl;
//输出
//9 8 77 提示:左对齐时每行最后一个不对齐也行
//10 100 100 右对齐时则不行
left
控制输出对齐方式为左对齐,持续到再次改为右对齐为止right
控制右对齐
setfill()
设置用其他符号来补
cout<<setfill('0');
cout<<setw(2)<<9<<" "<<setw(3)<<8<<" "<<77<<endl;
cout<<setw(2)<<10<<" "<<setw(3)<<100<<" "<<100<<endl;
//输出
//09 008 77
//10 100 100
printf
语法
printf("%2d %3d %3d\n",9,8,77);
printf("%2d %3d %3d\n",10,100,100);
//输出
// 9 8 77
//10 100 100
其中 %长度d
用来控制输出长度,默认补空格
%2d
即长度为2,不足2位的补空格,如9前面补了1个空格%3d
即长度为3,不足3位的补空格,如8前面补了2个空格
当长度超出设定,会怎么样
printf("我有%2d爬虫币",9999);
//输出:我有9999爬虫币
这时会忽略你设置的长度,有多长就输出多长
如何左对齐
printf("%-2d %-3d %-3d\n",9,8,77);
printf("%-2d %-3d %-3d\n",10,100,100);
//输出
//9 8 77
//10 100 100
%-2d
中用-2表示左对齐,长度为2
用0补,而不是空格
printf("%02d %3d %3d\n",9,8,77);
printf("%02d %3d %3d\n",10,100,100);
//输出
//09 8 77
//10 100 100
%02d
中用02表示用0去补
能用别的去补空格吗?不能
比如这里我想用@去补空格
printf("%@5d",9);//输出的是%@5d,直接把字符串输出了
%-02d
这种写法吗?你可以试试看,但是先想一想学号9的不就变成学号90了吗?