设置字符宽度
用 iomanip 头文件里的 setw() 函数来设置宽度,括号里填设置的宽度,应用在cout语句里,如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int x=12,y=13,z=14,a=123,b=145,c=156;
cout<<setw(4)<<x<<setw(4)<<y<<setw(4)<<z<<endl;
cout<<setw(4)<<a<<setw(4)<<b<<setw(4)<<c<<endl;
return 0;
}
/*输出如下:
12 13 14
123 145 156
*/
注意:
括号里设置宽度只能填一个正整数或结果为正整数的表达式;
只对紧跟其后的一个数有效;
当给定宽度大于实际数据位数时,数据向右对齐,左边留出空格;
且设置的宽度小于实际宽度时,按实际输出;
转换整数进制
类似于setw()函数用法,但只用一个进制标识符声明,且声明后若无其他进制声明,则默认接下来的输入或输出都为这种进制,dec表示十进制,hex表示十六进制,oct表示八进制,具体用法如下:
#include<iostream>
using namespace std;
int main(){
int a=15,b=16,c=17,d=100;
cout<<hex<<a<<" "<<b<<" "<<oct<<c<<" "<<d<<endl;
return 0;
}
/*输出结果如下:
f 10 21 144
*/
设置科学计数法显示
调用系统函数来开启和结束科学计数法;
开启的函数为cout.setf(ios::scientific,ios::floatfield);
结束的函数为cout.unsetf(ios::scientific);
开启和结束间的所有实数输出都表现为科学计数法格式,见下:
#include<iostream>
using namespace std;
int main(){
double a=1.4141414,b=654.321;
cout.setf(ios::scientific,ios::floatfield);
cout<<a<<endl<<b<<endl;
cout.unsetf(ios::scientific);
return 0;
}
/*输出如下:
1.414141e+000
6.543210e+000
*/
处理输入的字符数据
一般来说,输入流会按照分隔符来将输入的数据分别赋给对应位置的变量,但输入字符数据时有一个例外,如下:
#include<iostream>
using namespace std;
int main(){
int a,b;
char c,d;
cin>>a>>b>>c>>d;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
return 0;
}
/*上一行是输入,下一行是输出:
12 34 5678
12 34 5 6
*/
字符型变量只会认一个字符,所以就分别领走了5和6,剩下的78没有变量来认领,就会被遗弃;
忽略接受某一数量的字符数据
在描述输入的时候使用函数 cin.ignore() ,括号里填要忽略的字符的个数,就可以在这个位置跳过某些字符数据的读取;
#include<iostream>
using namespace std;
int main(){
int a,b;
char c,d;
cin>>a>>b;
cin.ignore(3);
cin>>c>>d;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
return 0;
}
/*
12 34 5678
12 34 7 8
*/
从上面可以看到,读取时跳过了空格,5,6,所以c领走了7,d领走了8;
读取分隔符作为字符
使用函数 cin.get() 作为输入流,括号里填某个变量,就会按照输入顺序来将输入的字符或分隔符直接赋值给变量;
#include<iostream>
using namespace std;
int main(){
char c,d;
cin.get(c);
cin.get(d);
cout<<c<<" "<<d<<endl;
return 0;
}
/*
2
2
*/