输入和输出

程序的输入是指从外部文件系统输入数据到程序,程序的输出是指从程序输出数据到外部文件系统

  1. 对系统指定的标准设备进行输入输出,如键盘输入数据和屏幕输出数据,称为标准的输入输出,简称标准I/O。

  2. 对外存磁盘文件进行输入输出,以外存文件为对象的输入和输出,简称文件I/O。

  3. 对内存中指定的空间进行输入输出,通常指定一个字符数组(实际上可以存储任何信息)为存储空间,简称串I/O。

    IO

cout(console output):控制台输出,是ostream类的对象,在iostream库文件中作为全局对象定义。

和<<配合使用,<<运算符对所有基本类型都进行了重载

ostream& operator<<(ostream& dest, int source);

ostream& operator<<(ostream& dest, char source);

ostream& operator<<(ostream& dest, char* source);

cin(console input):控制台输入,是istream类的对象,在iostream库文件中作为全局对象定义。

和>>配合使用,>>运算符对所有基本类型都进行了重载

istream& operator>>(istream& source, int dest);

istream& operator>>(istream& source, char dest);

istream& operator>>(istream& source, char* dest);

note: >>提取数据以空白符(空格,回车,制表符)为数据的分隔符,因此提取字符串数据时,不能提取空白字符。

格式化输出:

  1. 使用控制符。在头文件
  2. 使用流对象成员函数
    • 设置整数进制 cout.flags(ios::hex)
    • 设置域宽(不具有延续性) cout.width(5)
    • 设置填充字符 cout.fill('*')
    • 设置浮点数精度 cout.precision(5)
    • 设置格式控制 cout.flags(ios::left)

标准输入流成员函数

cin.get() //在缓冲区获取一个字符

cin.getline() //在缓冲区获取多个字符

cin.putback() //放回一个字符到缓冲区

cin.peek() //窥探一个字符,不取出

cin.ignore() //忽略一个字符

cin.fail() //标志位

cin.clear() //清空标志位

cin.sync() //数据源和缓冲区同步

文件输入输出流

文件可以分为文本文件和二进制文件。

文本文件也称ASCII码文件,每个字节保存ASCII字符,又称字符文件

二进制文件是将数据按其在内存中的存储方式存放在磁盘上,又称字节文件

输出流对象

1.ofstream ofile;

ofile.open('./file.txt', ios::out); //第一个参数是文件名,第二个参数是打开方式。与cout一样的模式,只不过cout是标准库为我们提前定义的全局对象,而文件输出流对象需要我们自己定义

2.ofstream ofile('./file.txt', ios::out);

输入流对象

1.ifstream ifile;

ifile.open('./file.txt', ios::in); //与cin一样的模式,只不过cin是标准库为我们提前定义的全局对象,而文件输入流对象需要我们自己定义

2.ifstream ifile('./file.txt', ios::in);

输入输出流对象

fstream file('./file.txt', ios::in | ios::out | ios::binary);

note:使用fstream创建对象时,如果文件不存在,不能使用ios::in,使用的话会打开文件错误。并且使用fstream类对象进行文件读写时,要注意指针的位置。写完之后,要想读写的文件,要进行指针复位。

文件指针:用于保存在文件中进行读或写的位置。通过对位置指针进行操作,适当地调整读或写的位置,可以实现对磁盘文件的随机访问。(常用于二进制文件)

与ofstream类对应的是写文件指针,指定下一次写数据的位置。相关的操作函数是:

seekp:用于移动指针到指定位置

tellp:返回指针当前的位置

使用方法:

  • seekp(n, ios::beg) 从文件开始位置移动n个字节

  • seekp(n, ios::end) 从文件结尾位置移动n个字节

  • seekp(n, ios::cur) 从文件当前位置移动n个字节

n=0,表示移动到指定位置。n>0,表示从指定位置向前移动n个字节。n<0,表示从指定位置向后移动n个字节。

streampos n = ofile.tellp()

streampos可以看作是整型,返回值保存指针当前的位置(从文件起始位置到指针当前位置的字节数)

与ifstream类对应的是读文件指针,指定下一次读数据的位置。相关的操作函数是:

seekg:用于移动指针到指定位置

tellg:返回指针当前的位置

note:fstream类创建的对象可以调用seekp和seekg,并且具有同样的效果。但是ofstream和ifstream对象只能调用自己的指针函数

打开方式

ios::in 打开一个输入文件,是ifstream对象的默认方式

ios::out 打开一个输出文件,是ofstream对象的默认方式。如果存在这个文件,删除原有内容,加上新内容。不存在这个文件就创造这个文件。

ios::binary 以二进制模式打开一个文件(默认是文本模式)

ios::app 打开一个输出文件,用于在文件末尾添加数据,不删除原有内容 //没有该文件,也会创建该文件

ios::ate 打开一个现有文件(用于输入和输出),并定位到文件末尾

ios::trunc 打开一个输出文件,如果存在就删除原有内容

多种打开方式可以联合使用,使用按位或运算符|

文件对象使用后,一定要关闭.文件打开后,要进行判断是否打开成功is_open()

有两个区别标准输入输出流对象的函数

ostream& write(const char* str, int n);把内存中的一块内容整体写入到输出文件中。主要用于输出数组,字符串和自定义对象等具有连续内存的数据。常用于二进制文件的输出。

ostream& read(const char* str, int n);把文件中的一块内容整体写入到变量中。主要用于提取数据到数组,字符串和自定义对象中。常用于二进制文件的输入。

bool eof() const; 判断文件流是否结束

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top