#include <iostream>
#include <fstream> //文本文件输入输出头文件
#include <cstdlib> // 函数exit()原型头文件
#include <cstddef> //数组大小正确类型头文件
using namespace std; //命名空间

//const int SIZE = 60;
int main()
{
const size_t SIZE=60;
char filename[SIZE];

ifstream inFile; //读入文件对象
cout << "Enter name of data file: ";
cin.getline(filename, SIZE);//读入文件数据每SIZE个字符读入字符数组filename
inFile.open(filename); //绑定读入文件
//检测文件是否正确打开,
//用于排除指定文件不存在,文件位于其他目录,文件拒绝访问,文件名输错,文件扩展名错误等引起的文件无法正常打开。
if (!inFile.is_open())
{
cout << "Could not open the file " << filename << endl;
cout << "Program terminating.\n";
exit(EXIT_FAILURE);
}
double value;
double sum = 0.0;
int count = 0;

//方法①标准读入文件数据处理操作
//inFile >> value; // 循环开始前读入第一个数据
while (inFile.good()) // while input good and not at EOF
{
++count; // 计数
inFile >> value;
sum += value; // 求和
//inFile >> value; //下次循环开始前读入上次循环末尾数据
}

//方法②简化读入文件数据处理操作,与方法①等价!!!
// while( !inFile.eof() && inFile>>value )
//{
// ++count;
//sum+=value;
//}
//方法③简化读入文件数据处理操作,与方法①等价!!!
//while( inFile>>value )
//{
// ++count;
// sum+=value;
//}

//以下代码可用于确定文件循环终止的原因
if (inFile.eof())
cout << "End of file reached.\n";//超过文件末尾EOF
else if (inFile.fail())
cout << "Input terminated by data mismatch.\n";//EOF和类型不匹配
else
cout << "Input terminated for unknown reason.\n";//其他原因,如文件受损或硬盘故障等
if (count == 0)
cout << "No data processed.\n";//没有文件数据
else
{
cout << "Items read: " << count << endl;
cout << "Sum: " << sum << endl;
cout << "Average: " << sum / count << endl;
}
inFile.close(); //关闭打开文件
return 0;
}

简单文件数据读入处理_C++


事先创建的文本数据如下图所示:

简单文件数据读入处理_数据_02