文本I/O和文本文件
cin输入原理
原理
程序将输入视为一系列的字节,每个字节都被解释为字符编码。<br>不管什么目标数据类型,输入都是字符数据——文本数据。<br>cin对象负责将文本转换为其它类型。
注意
本章讨论的I/O相当于控制台I/O ,仅适用于文本文件(txt??)
写入到文本文件中
前提条件
头文件 fstream
头文件fstream 定义了一个用于输出的ofstream类
需要声明一个或多个 ofstream 变量(对象),并命名
指明名称空间std
ofstream 在std中,其它不用
将ofstream 对象与文件关联起来。用open()方法
使用文件后,用close()
结合使用ofstream 对象和运算符<< 来输出各种类型数据
文件输出步骤
包含头文件 fstream
创建一个ofstream 对象
将该ofstream 对象和文件关联起来
像使用cout 一样使用 对象
关闭文件!!不要漏了
声明
ofstream outFile;<br>ofstream fout;
关联文件
法一<br>
outFile.open("fish.text")
法二<br>(自己输入)
char filename[50];<br>cin>>filename;<br>fout.open(filename);
说明
若文件不存在,会自己创建
文件已存在,首先截断该文件,将长度截到0——丢弃原有的内容
写入
double wt = 125.8;<br>outFile<<wt;
char line[80] ="Objects are closer than they appear."<br>fout<<line<<endl;
说明
可以像cout( 如 << , endl, setf() )那样使用 ofstream对象,<br>可使用cout的任何方法
cout.setf(ios_base::showpoint)--在数字前显示价钱符号$<br>可以 outFile.setf(ios_base::showpoint)
cout.precision(2);显示后两个小数点。<br>outFile.precision(2);
读取文本文件
前提条件
头文件fstream
头文件fstream 定义了一个用于处理输入的ifstream 类
声明ifstream变量(对象)
对象与文件关联。open()
close()关闭
ifstream 对象和运算符 >> 读取各类型的数据
ifstream 对象和get()来读取一个字符,用 ifstream 对象和 getline()读取一行字符
结合使用ifstream 和 eof() fail() 判断输入是否成功
ifstream 被当测试条件时,最后一个读取操作成功,转换为Bool的true
声明
ifstream inFile;<br>ifstream fin;
文件关联
inFile.open("bowling.txt")
char filename[50];<br>cin>>filename;<br>fin.open(filename);
检查文件是否打开成功
方法is_open()
返回值
打开成功 true
打开失败 false
代码
inFile.open("bowling.txt");<br>if( !inFile.is_open())<br>{<br> exit(EXIT_FAILURE);<br>}
说明
exit()在 cstdlib中,EXIT_FAILURE参数值???相当于0??。
is_open()是C++较新的内容,编译器不支持,<br>可以使用 good()替代。//一样的吗??
读取操作
double wt;<br>inFile>>wt;
char line[81];<br>fin.getline(line,81);
说明
像cin一样使用,cin任何方法可用于ifstream 对象
读取时问题
类型不匹配
inFile.fail()
返回值
不匹配: true<br>匹配: false
(总)检查读取是否成功
方法
inFile.good()
返回值
成功: true<br>失败: false
代码
int value;<br>inFile >> value;<br>while ( inFile.good() )<br>{<br> ....<br> inFile >> value;<br>}
代码
子主题
说明
while ( inFile.good) 要循环输入值,可用<br>while ( inFile >> value )替代
其他
文本文件每行以回车字符和换行符结尾,读取文件时转换成换行符