1、强行刷新缓冲区控制符flush与endl:
std::cout<< std::flush; //刷新缓冲区
std::cout<< std::endl; //刷新缓冲区,并插入一个换行符
2、修改输出格式:
ostream类从ios类派生,而ios类从ios_base类派生而来。ios_base存储了描述格式状态的信息,因此可以通过ios_base成员函数控制输出格式。
a) 以十六进制显示:
hex(cout); //cout<<hex; ostream重载了<<运算符,使得两函数等价。
b) 调整字段宽度:
int original_width = cout.width(5); //设置字段宽度为5,返回原始宽度。
默认右对齐,空格填充;只影响下一条语句。
c) 改变填充字符:
cout.fill('*');
影响之后所有语句。一旦设置长期有效,直到重新设置。
d) 设置浮点数输出精度:
cout.precision(2); //默认模式设置:显示的总位数,不包括小数点
cout<<fixed;
cout.precision(2); //定点模式设置:显示小数点后两位
e) 左对齐:
cout<<left;
其余设置方法见C++ Primer Plus 17.2.4(7)小节
3、单字符输入cin.get()与cin.get(char&):
char abc;
abc = cin.get(); // 返回int,因此不可连用
cin.get(abc); // 返回cin引用,因此可以连用
while(abc != '\n'){
cout << abc;
cin.get(abc);
} // get()不跳过空格、制表符、换行符等,因此可以跳出循环。
cin>>abc;
while(abc != '\n'){
cout << abc;
cin >> abc;
} // >>跳过空格、制表符、换行符等,因此为死循环。
4、字符串输入cin.get(char*, int)与cin.getline(char*, int):
意外字符串输入:
参考资料:C++ Primer Plus 17.3.3
总结
1、强行刷新缓冲区控制符flush与endl。
2、修改输出格式见上文。
3、需要跳过空格、换行符则使用<<,不跳过则get()或get(char&)。
4、字符串输入,可通过第三个参数自定义分隔符cin.getline(char*, int,char)
。