为了便于理解,我们把cout 用于控制台输出时的一些情况和写入到文本文件的情况进行类比:
注意:cout 控制台输入输出中,头文件 iostream 声明了一个名为 cout 的 ostream 对象,无需自己手动声明;文件输出中,我们必须自己动手声明一个 ofstream 对象,为其命名,将其同文件关联起来。请看下面的例子:
#include
ofstream OutFile; //声明一个 ofstream 对象
OutFile.open("study.txt"); //将OF与“study.txt”文件关联起来
下面请看一个完整的程序,用户输入信息,将信息显示到屏幕上,再将这些信息写入到文本文件中:
#include
#include
using namespace std;
int main()
{
char name[20];
double height;
double weight;
ofstream outFile;//创建了一个ofstream 对象
outFile.open("information.txt");//outFile 与一个文本文件关联
cout<<"Enter name: ";
cin.getline(automobile, 20);
cout<<"Enter height: ";
cin>>year;
cout<<"Enter weight: ";
cin>>weight;
// cout 控制台输出前面输入的信息
cout<cout.precision(2);
cout.setf(ios_base::showpoint);
cout<<"Make and Model: "<cout<<"Year: "<cout<<"Was asking $"<cout<<"Now asking $"<// outFile 把信息写入到文本文件
outFile<//小数点格式显示double
outFile.precision(2); //设置精度
outFile.setf(ios_base::showpoint); //强制显示小数点后的零
outFile<<"Name: "<"Height: "<"Weight: "<//使用完文本文件后要用close()方法将其关闭
return 0;
}
接下来,我们再把cin 用于控制台输入时的一些情况和读取文本文件的情况进行类比:
可以结合使用 ifstream 和 eof()、fail()方法来判断输入是否成功
如果试图打开一个不存在的文件用于输入将会导致后面使用 ifstream 对象读取数据时发生错误,因此用户需要使用 is_open() 方法检查文件是否被成功打开,如下:
#include
#include
ifstream InFile;
InFile.open("information.txt");
if(!Infile.is_open()){
exit(EXIT_FAILURE);
}
如果文件被成功打开, is_open() 方法将返回 true , exit()的原型在头文件 cstdlib 中被定义,exit(EXIT_FAILURE) 用于终止程序。
下面请看一个完整的程序,用户打开指定的文本文件,读取文件中的 double 类型数据,并在控制台输出所读取数据的数目、总和以及平均数:
#include
#include
#include
using namespace std;
const int SIZE = 60;
int main()
{
char fileName[SIZE];
ifstream InFile;
cout<<"Enter the name of data file: ";
cin.getline(fileName, SIZE);
cout<if(!InFile.is_open()){
cout<<"Could not open the file "<< fileName <cout<<"Program terminating.\n";
exit(EXIT_FAILURE);
}
double value;
double sum = 0.0;
int count = 0;
InFile >> value;
while(InFile.good()){
++count;
sum += value;
InFile >> value;
}
if (InFile.eof())
cout<<"End of file reached:\n";
else if (InFile.fail())
cout<<"Input terminated by data mismatch.\n";
else
cout<<"Input terminated for unknown reason.\n";
if(count == 0)
cout<<"No data processed.\n";
else{
cout<<"Items read: "<cout<<"Sum: "<cout<<"Average: "<return 0;
}