C语言中,我们通常会使用 scanf 和 printf来进行输入输出操作。C++中依然可以使用scanf 和 printf,同时又增加了一套新的、更容易使用的标准输入输出库cin和cout。
需要注意的是,cin 和cout都是 C++ 的内置对象,而不是关键字 (scanf 和 printf也不是关键字,而是C语言中定义的函数)。cin 和cout 分别是istream 和ostream 类的对象(实例),只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。这种在 C++ 中提前创建好的对象称为内置对象。
cout 对象"连接"到标准输出设备,通常是显示屏。cout 是与流插入运算符 << 结合使用的。C++ 编译器根据要输出变量的数据类型,选择合适的流插入运算符来显示值。<< 运算符被重载来输出内置类型(整型、浮点型、double 型、字符串和指针)的数据项,流插入运算符 << 在一个语句中可以多次使用。
endl (end of line的简写) 用于在行末添加一个换行符,endl是一个特殊的函数,跟在流控符<<之后,省略函数的参数。
cin 对象附属到标准输入设备,通常是键盘。cin 是与流提取运算符 >> 结合使用的。
Cin和cout在头文件<iostream>中定义,该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。Cerr和clog一般在大型程序中用的较多,小型程序cin和cout就足够了。输出格式控制如hex/dec、scientific/fixed 、 left/right、boolalpha/noboolalpha 也在iostream中定义。
如果要使用setw 、setfill、 setprecision等格式控制,需要添加<iomanip> 头文件。
boolalpha的作用是使bool型变量按照字符串false、true的格式输出。noboolalpha使得结果按照1、0的格式输出。Bool变量默认按1/0格式输出。
setw (set width)所起的作用是一次性的,即只影响下一次输出。每次需要指定输出宽度时都要使用 setw()。
参考 http://c.biancheng.net/view/275.html
*dec | 以十进制形式输出整数 |
hex | 以十六进制形式输出整数 |
oct | 以八进制形式输出整数 |
fixed | 以普通小数形式输出浮点数 |
scientific | 以科学计数法形式输出浮点数 |
left | 左对齐,即在宽度不足时将填充字符添加到右边 |
*right | 右对齐,即在宽度不足时将填充字符添加到左边 |
setbase(b) | 设置输出整数时的进制,b=8、10 或 16 |
setw(w) | 指定输出宽度为 w 个字符,或输人字符串时读入 w 个字符 |
setfill(c) | 在指定输出宽度的情况下,输出的宽度不足时用字符 c 填充(默认情况是用空格填充) |
setprecision(n) | 设置输出浮点数的精度为 n。在使用非 fixed 且非 scientific 方式输出的情况下,n 即为有效数字最多的位数,如果有效数字位数超过 n,则小数部分四舍五人,或自动变为科学计 数法输出并保留一共 n 位有效数字。在使用 fixed 方式和 scientific 方式输出的情况下,n 是小数点后面应保留的位数。 |
setiosflags(flag) | 将某个输出格式标志置为 1 |
resetiosflags(flag) | 将某个输出格式标志置为 0 |
boolapha | 把 true 和 false 输出为字符串 |
*noboolalpha | 把 true 和 false 输出为 0、1 |
showbase | 输出表示数值的进制的前缀 |
*noshowbase | 不输出表示数值的进制.的前缀 |
showpoint | 总是输出小数点 |
*noshowpoint | 只有当小数部分存在时才显示小数点 |
showpos | 在非负数值中显示 + |
*noshowpos | 在非负数值中不显示 + |
*skipws | 输入时跳过空白字符 |
noskipws | 输入时不跳过空白字符 |
uppercase | 十六进制数中使用 A~E。若输出前缀,则前缀输出 0X,科学计数法中输出 E |
*nouppercase | 十六进制数中使用 a~e。若输出前缀,则前缀输出 0x,科学计数法中输出 e。 |
internal | 数值的符号(正负号)在指定宽度内左对齐,数值右对 齐,中间由填充字符填充。 |
/*
Original 2020-03-29
README:
This is a example to teach you use cout & format
execute:
g++ -g -Wall -O0 main.cpp -o sim
*/
#include <iostream> //cin/cout hex/dec scientific/fixed left/right boolalpha/noboolalpha
#include <iomanip> // setw setfill need this header file
#include <stdio.h> // printf
// #include <fstream> // printf
using namespace std;
int main(int argc, char** argv)
{
char a = 'L'; //can't write as a = "L"
unsigned int b = 100;
unsigned int c = 0xffff;
double d = 3.1415;
bool e = true; // only C++ have bool type
printf("hello world ! %c %d %x %f \n", a, b, c, d );
cout<<"hello world ! "
<<a <<" "<<dec<<b <<" "<<hex<<c <<" "<<d <<" "<<e
<<endl;
//format
cout<<scientific<< d <<endl;
cout<<fixed <<d <<endl;
cout<<boolalpha <<e <<" " <<noboolalpha <<e<<endl;
cout<<left <<setw(20) << "left"<<endl;
cout<<right <<setw(20)<<"right"<<endl;
//need add <iomanip> header file
cout<<setprecision(8) <<d <<endl;
cout<<setw(10)<<setfill('*')<<"44444"<<endl;
cout<<setw(10)<<setfill('*')<<left<<"55555"<<endl;
return 0;
}