标准IO流cin与cout

来源:互联网 发布:猪八戒的前世今生 知乎 编辑:程序博客网 时间:2024/05/29 16:17

C++程序把输入和输出看做字节流,流,就是流动的输出。c++的标准IO流,有cin,cout,clog,cerr.

1.cin

void test()
{
char ch1,ch2;
cin.get(ch1);//读取一个字符
ch2 = cin.get();//读取一个字符
cin.get(ch1).get(ch2);//链式编程
char buf[1024];
cin.ignore(1);//忽略一个字符
cin.getline(buf, 1024);//读取一行
char ch = cin.get();//读取一个字符
cin.putback(ch);//将读取的字符放回缓冲区
char ch3 = cin.peek();//偷窥一个字符,缓冲区中的内容不减少
}

2.cout

out流对象,coutconsole output的缩写,意为:控制台输出。

cout不是C++预定义的关键字,它是ostream流类的对象,在iostream中定义。流是流动的数据,cout流是流向显示器的数据。cout流中的数据时用流插入运算符“<<”顺序加入的。 

cout<<输出基本类型的数据时,可以不必考虑数据是什么类型,系统会判断数据的类型,并根据其类型选择调用与之匹配的运算符重载函数。这个过程是自动的,用于不必干预。 

cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中所有数据,然后插入一个换行符,并刷新流。 

iostream中,只对“<<”和“>>”运算符用于标准类型数据的输入输出进行了重载,但未对用户声明的类型数据的输入输出进行重载。如果用于声明了新的类型,并希望用“<<”和“>>”运算符对其进行输入输出,需要对该数据类型进行运算符重载。


格式化输出:在输出数据时,有时需要按一定的格式输出。这有两种方法,一是使用控制符,二是使用流对象的成员函数。

 

cout中用于控制输出格式的成员函数:

流成员函数

与流成员函数作用相同的控制符

作用

precision()

setprecision()

设置精度

width()

setw()

设置字段宽度

fill()

setfill()

设置填充字符

serf()

setiosflag()

设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中的内容相同

unset()

resetioflags()

终止已设置的输出格式状态,在括号中应指定内容



流成员函数setf和控制符setiosflags括号中的参数表示格式状态,它是通过格式标志来指定的。格式标志在类ios中被定义为枚举值。因此在引用这些格式标志时,要在前面加上类名ios和作用域运算符::

格式标志

作用

ios::left

输出数据在本域宽范围内向左对齐

ios::right

输出数据在本域宽范围内向右对齐

ios::internal

数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符补齐

ios::dec

设置整数的基数为10

ios::oct

设置整数的基数为8

ios::hex

设置整数的基数为16

ios::showbase

强制输出整数的基数(八进制以0开头,16进制以0X开头)

ios::showpoint

强制输出浮点数的小点和尾数0

ios::uppercase

在以科学计数法格式E和以十六进制输出字符时以大写表示

ios::showpos

正数显示+

ios::scientific

浮点数以科学计数法格式输出

ios::fixed

浮点数以定点格式(小数形式输出)

ios::unitbuf

每次输出之后刷新所有的流

ios::stdio

每次输出之后清除stdoutstderr


控制符

作用

oct

设置数值的基数为8

dec

设置数值的基数为10

hex

设置数值的基础为16

setfill(ch)

设置填充字符,可以是字符常量或变量

setprecision(n)

设置浮点数的精度为n位,在以一般十进制小数

setw(n)

设置字段宽度为n

setiosflags(ios::fixed)

设置浮点数以固定的小数位数显示

setiosflags(ios::scientific)

设置浮点数以科学计数法显示

setiosflags(ios::left)

输出数据左对齐

setiosflags(ios::right)

输出数据右对齐

setiosflags(ios::skipws)

忽略前导的空格

setiosflags(ios::uppercase)

数据以十六进制形式输出时字符以大写表写

setiosflags(ios::lowercase)

数据以十六进制形式输出时字符以小写表示

setiosflags(ios::showpos)

输出整数时显示+


void test1()
{
cout << "23456789";
cout.flush();//刷新缓冲区
char ch='a';char ch1='b', ch2='c';
cout.put(ch);//输出一个字符
cout.put(ch).put(ch1).put(ch2);//链式编程
char *str = "12345679";
int len=7;
cout.write(str, len);//输出len个字符
}
void test2()//流成员函数
{
int num = 123;
cout.width(20);//设置宽度
cout.fill('#');//设置填充字符
cout.setf(ios::left);//设置左对齐
cout.unsetf(ios::dec);//卸载十进制
cout.setf(ios::hex);//设置16进制
cout << num << endl;
}
void test3()//使用控制符
{
int num = 123;
cout << setw(10) //设置宽度
<< setfill('#')//设置天长字符
<< setiosflags(ios::showbase)//设置显示0x
<< setiosflags(ios::left)//左对齐
<< hex//设置16进制 
<< num << endl;
}

0 0
原创粉丝点击