1. 输入/输出流的成员函数
put()函数
put函数常用的调用形式:
cout.put(char ch);
功能:用于输出一个字符,还可以是ASCII代码(或者是ASCII表达式)
cout.put(65);
get()函数
常用形式为:cin.get(ch);
功能:是从输入流中读取一个字符包括空白符,赋给字符变量ch如果读取成功则函数返回非0值,如果失败(遇文件结束符EOF)则函数返回0值
#include<iostream>
using namespace std;
int main()
{char ch;cout<<"输入数据:"<<endl;while(cin.get(ch)){cout.put(ch);}return 0;}
getline函数
getline函数常用的调用形式为:
cin.getline(字符指针,字符个数n,终止标志字符);
功能:从输入流读取n-1个字符,赋给指定的字符数组(或字符指针),然后插入一个字符串结束标志“\n”;
如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取,然后插入一个字符串结束标志’\n’。
#include<iostream>
using namespace std;
int main()
{char line[20];cout<<"输入数据"<<endl;cin.getline(line,20,'t');cout<<line; return 0;}
2. 预定义类型输入输出的格式控制
用流成员函数进行输入输出格式控制
成员函数有
设置状态标准的流成员函数self()
ios::skipws 跳过输入中的空白符,用于输入
ios::left 输出数据在本域宽范围内左对齐,用于输出
ios::right 输出数据在本域宽范围内右对齐,用于输出
ios::internal 数据的符号位左对齐,数据本身右对齐,
符号和数据之间为填充符,用于输出
ios::dec 设置整数的基数为10,用于输入/输出
ios::oct 设置整数的基数为8,用于输入/输出
ios::hex 设置整数的基数为16,用于输入/输出
ios::showbase 输出整数时显示基数符号(八进制数以0打头,
十六进制数以0x打头),用于输入/输出
ios::showpoint 浮点数输出时带有小数点,用于输出
ios::uppercase 在以科学表示法格式E和以十六进制
输出字母时用大写表示,用于输出
ios::showpos 正整数前显示“+”符号,用于输出
ios::scientific 用科学表示法格式(指数)显示浮点数, 用于输出
ios::fixed 用定点格式(固定小数位数)显示浮点数,用于输出
ios::unitbuf 完成输出操作后立即刷新所有的流,用于输出
ios::stdio 完成输出操作后刷新stdout和stderr,用于输出
#include<iostream>
using namespace std;
int main()
{ cout.setf(ios::showpos|ios::scientific);
cout <<567<<" "<<567.89<<endl;
return 0; }
清理状态标志的流成员函数unself()
功能:清除某一状态标志,即是将某一状态标志位置“0”,
说明:
流成员函数unsetf括号中的参数flags与流成员函数setf相同。
设置域宽的流成员函数width()
功能:设置域宽为n位
注意:所设置的域宽仅对下一个流输出操作有效,当一次输出操作完成之后,域宽又恢复为默认域宽0。
设置实数的精度流成员函数precision()
功能:设置实数的精度为n位,在以一般十进制小数形式输出时n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时n为小数位数。
填充字符的流成员函数fill()
功能:当输出值不满域宽时用填充字符来填充,默认情况下填充字符为空格。
说明:在使用填充字符函数fill时,必须与width函数相配合,否则就没有意义。
#include<iostream>
using namespace std;
int main()
{ double i=-5.1;cout.width(10);cout.fill('*');cout.setf(ios::internal);cout<<i<<endl;return 0;
}
#include<iostream> //例9.5-1 流成员函数使用方法举例。
using namespace std;
int main()
{ cout<<"-------1--------\n";cout.width(10); //设置域宽为10位cout<<123<<endl; //输出整数123,占10位,默认为右对齐cout<<"-------2--------\n";cout<<123<<endl;cout<<"-------3--------\n";cout.fill('&'); //设置填充字符为'&'
cout.width(10); //设置域宽为10位
cout<<123<<endl;
cout<<"-------4--------\n";
cout.setf(ios::left); //设置左对齐
cout<<123<<endl;
return 0;}
#include<iostream>
using namespace std;
int main()
{cout<<"-------5--------\n";cout.precision(4); //设置实数的精度为4位 cout<<123.45678<<endl; cout<<"-------6--------\n";cout.setf(ios::fixed); cout<<123.45678<<endl;cout<<"-------7--------\n";cout.width(15);//设置域宽为15位cout.unsetf(ios::fixed); cout.setf(ios::scientific);cout<<123.45678<<endl; return 0;
}
使用预定义的操作符进行输入输出格式控制
这种方法使用了一种称为操纵符(也称为操纵函数或控制符)的特殊函数。
操纵符分为:
*不带形参的操纵符
*带形参的操纵符符
在很多情况下,使用操纵符进行格式化控制比用ios状态标志和成员函数要方便。
C++提供的预定义操纵符如下:
dec 设置整数的基数为10,用于输入/输出
hex 设置整数的基数为16用于输入/输出
oct 设置整数的基数为8用于输入/输出
ws 用于在输入时跳过开头的空白符,用于输入
endl 输出一个换行符并刷新输出流,用于输出
ends 插入一个空字符null,通常用来结束一个字符串,用于输出
flush 刷新一个输出流,用于输出
setbase(n) 设置整数的基数为n(n的取值为0,8,10 或16),n 的默认值为0,即以十进制形式输出。用于输入/输出
setfill© 设置c为填充字符,默认时为空格,用于输出
setprecision(n) 设置实数的精度为n位,在以一般十进制 小数形式输出时n代表有效数字。在以fixed(固定小数位数)形式和scientific(指数)形式输出时 n为小数位数设置域宽为n,用于输出
setw(n) 设置域宽为n, 用于输出
setiosflags(f) 设置由参数f指定的状态标志, 用于输入/输出
resetiosflags(f) 终止由参数f指定的状态标志 , 用于输入/输出
带有常用的状态标志的操纵符setiosflags和
resetiosflags
setiosflags(ios::left) 数据按域宽左对齐输出
setiosflags(ios::right) 数据按域宽右对齐输出
setiosflags(ios::fixed) 固定的小数位数显示
setiosflags(ios::scientific) 设置浮点数以科学表示法(即指数形式)显示
setiosflags(ios::showpos) 在正数前添加一个“+”号输出
setiosflags(ios::uppercase) 在以科学表示法格式E和以十六进制输出字母时用大写表示
resetiosflags(f) 终止已设置的状态标志,在括号中应指定f的内容
说明:
(1) 所有不带形参的操纵符都定义在头文件iostream.h中,而带形参的操纵符则定义在头文件iomanip.h中,因而使用相应的操纵符就必须包含相应的头文件。例如:
#include
#include
(2) 在进行输入输出时,操纵符被嵌入到输入或输出链中,用来控制输入输出的格式,而不是执行输入或输出操作。
#include<iostream> //例9.8预定义的操纵符的使用方法举例。
#include<iomanip>
using namespace std;
int main() { cout<<setw(10)<<123<<567<<endl; //①
cout<<123<<setiosflags(ios::scientific)<<setw(20) <<123.456789<<endl; //②
cout<<123<<setw(10)<<hex<<123<<endl; //③
cout<<123<<setw(10)<<oct<<123<<endl; //④
cout<<123<<setw(10)<<dec<<123<<endl; //⑤
cout<<resetiosflags(ios::scientific)<<setprecision(4)<<123.456789<<endl; //⑥
cout<<setiosflags(ios::left)<<setfill('#')<<setw(8)<<123<<endl;//⑦
cout<<resetiosflags(ios::left)<<setfill('$')<<setw(8) <<456<<endl; //⑧
return 0;}
使用用户自定义的操作符进行输入输出格式控制