C++的文本操作——读取文本文件(不积跬步,无以至千里,之第四步。)

if (!inFile.is_open())
    很符哦初学者花大量的时间检查文件读取循环的哪里出现了问题后,最
    终发现问题在于程序没有打开文件。检查文件是否被打开可避免将这种
    精力放在错误的地方的情况的发生。
    
    
#include   函数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 
#include 
#include   
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,实验内容如下:
C++的文本操作——读取文本文件(不积跬步,无以至千里,之第四步。)_第1张图片

你可能感兴趣的:(C++学习,c++)