if (!inFile.is_open())
很符哦初学者花大量的时间检查文件读取循环的哪里出现了问题后,最
终发现问题在于程序没有打开文件。检查文件是否被打开可避免将这种
精力放在错误的地方的情况的发生。
#include <cstdlib> 函数exit()的原型是在头文件cstdlib中定义的
在该头文件中还定义了一个用于操作系统通信的参数值EXIT_FAILURE。
函数exit()终止程序。
while (inFile.good())
首先,程序读取文件时不应该超过EOF。如果最后一次读取文件时遇到EOF ,
方法eof()将返回true。
其次,程序可能遇到类型不匹配的情况,此程序希望读取的文件中的内容都是
数字,方法fail()将返回true(如果遇到EOF,该方法也将返回true)。
最后,可能出现意外的问题,如文件受损或硬件故障,如果最后一次读取时发生
了这样的问题,方法bad()将返回true。
不要分别检查这些情况,一种更简单的方法是使用good()方法,该方法在
没有发生任何错误时返回true。
inFile >> value;
inFile 相当于cin,读取是遇到空格/换行符即停止。下次读取是则跳过之前
遇到的空格/换行符。
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const int SIZE = 60;
int main()
{
char filename[SIZE];
ifstream inFile;
cout << "Enter name of data file: ";
cin.getline(filename, SIZE);
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())
{
++count;
sum += value;
inFile >> value;
}
if (inFile.eof())
cout << "End of file reached.\n";
else if (inFile.fail())
cout << "Input terminated by data mismath.\n";
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;
}
运行结果:
输入错误的文件名
输入正确的文件名:
代码目录下要存在文件scores.txt,实验内容如下: