Linux中使用iOStream头文件,C++输入输出流(iostream library)

本文详细介绍了C++中的iostream库,包括cin、cout、cerr的使用,以及输入输出流的基本操作。讲解了如何输出指针地址,处理输入流的错误状态,get()和getline()函数的用法,还有文件输入输出的相关操作。文章还涵盖了输入输出流的条件状态、格式状态改变和相关头文件的包含。
摘要由CSDN通过智能技术生成

C++输入输出流(iostream

library)为内置数据类型和文件提供了输入输出操作支持,是一个使用频率很高的库。本文列出了iostream库一些基础问题和值得注意的特性,特别是与C语言不同的重载操作符及格式状态等。很久之前总结的,现在看起来也蛮有意思。

1. cin, cout

和 cerr

分别是什么?

istream(输入流)和ostream(输出流)是负责输入输出的类,iostream类是istream和ostream的派生类,允许双向输入输出。cin是标准输入,它是istream类的一个对象,作用是从终端读数据;cout是标准输出,它是ostream类的一个对象;作用是向终端写数据;cerr是标准错误,它也是ostream类的一个对象,作用是到处程序的出错消息。

注:cout 是带缓存的输出流,cerr是不带缓冲的输出流。当我们写

cout <<

“Hello, World!”

常量字符串被存储在与cout

相关联的缓冲区中,当缓冲区被刷新的时候字符将被写到标准输出上。常见简单的刷新的方法:

cout <<

“Hello, World!” << flush; //

直接刷新

cout <<

“Hello, World!” << ends; //

插入空格后刷新

cout <<

“Hello, World!” << endl; //

插入换行后刷新

cerr <<

“This is error!” // 无缓冲,直接写到标准输出上

2. 用cout

怎么样输出指针地址?

iostream库提供了指针类型的预定义输出操作符,允许显示对象的地址。缺省情况下这些值以十六进制的形式显示。如:

int i = 1024;

int *pi =

&i;

cout <<

"The address of int i is:" <<

&i <

cout <<

“The address of int i is:” << pi

<

输出如下:

The address of int i is:

0012FF70

The address of int i is:

0012FF70

3. 用cout

怎么输出C风格常量字符串的指针?

程序如下:

const char *str =

"vermeer";

cout <<

"The address of str is: " << str

<< endl;

printf("The address of str is: %x\n",

str);

输出如下:

Then address of str is:

vermeer

Then address of str is:

4740fc

Cout默认把const char *解释为C风格常量字符串,而不是其指针地址。

可以用一下的转型得到想要的结果:

<<

static_cast(const_cast(pstr))

首先把const强制转换掉,然后再转成void类型。

4.

istream对象何时为false?

可以用后面的表达式从cin读入一个值序列:while ( cin

>> ival )

例子如下:

#include

#include

int main()

{

vector ivec;

int ival;

while ( cin

>> ival )

ivec.push_back( ival );

// ...

}

此表达式表示:从标准输入读入一个序列,直到cin为false为止。

以下两种情况会使一个istream对象被计算为false:

1) 读到文件结束时(已经正确读完文件中的值)

2) 遇到无效的值。

所以可以用一下代码使程序更健壮

if ( ! cin )

cerr <<

"error: invalid int type entered!\n";

5.

istream的成员函数get()的用法?

1) 方式一:

get(char

&ch):

从输入流中提取一个字符,包括空白字符并将它存储在ch 中,它返回被应用的istream 对象。

ifstream inFile( infile_name.c_str()

);

ofstream

outFile(outfile_name.c_str());

char ch;

while (inFile.get(ch))

outFile.put(ch);

2) 方式二:

get():

从输入流中提取一个字符,区别是它返回该字符值而不是被应用的istream 对象它的返回类型是int 而不是char。为测试返回值是否为文件尾,我们将它与iostream 头文件中定义的常量EOF 做比较。被指定用来存放get()返回值的变量应该被声明为int 类型,以便包含字符值和EOF

int ch;

while((ch = cin.get()) !=

EOF)

cout.put(ch);

3) 方式三:

get(char *buf, streamsize size, char

delimiter='\n')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值