C++输出流格式

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=810 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 输出为 01

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

123axj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值