使用C ++ Fstream从文本文件中输出数字 - 需要帮助分隔行

时间:2013-10-21 21:51:54

标签: c++ fstream eof

我需要创建一个程序,从文本文件中获取整数,并输出它们,包括数字,最小数字,最大数字,平均数,总数,N数字等。我可以做到这一点就好了下面的代码,但我还需要每行处理文本。我的示例文件有7个数字,每行标签分隔,总共8行,但我假设我不知道每行有多少个数字,每个文件的行数等等。

另外,尽管我知道如何使用向量和数组,但是我所知道的特定类还没有得到它们,所以我宁愿不使用它们。

感谢。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    int num;
    int count = 0;
    int total = 0;
    int average = 0;
    string str = "";
    int numLines = 0;
    int lowNum = 1000000;
    int highNum = -1000000;

    ifstream fileIn;

    fileIn.open("File2.txt");

    if (!fileIn) {
        cout << "nError opening file...Closing program.n";
        fileIn.close();
    }
    else {
        while (!fileIn.eof()) {
            fileIn >> num;
            cout << num << " ";
            total += num;
            count++;

            if (num < lowNum) {
                lowNum = num;
            }

            if (num > highNum) {
                highNum = num;
            }
        }

        average = total / count;

        cout << "nnTotal is " << total << "." << endl;
        cout << "Total amount of numbers is " << count << "." << endl;
        cout << "Average is " << average << "." << endl;
        cout << "Lowest number is " << lowNum << endl;
        cout << "Highest number is " << highNum << endl;

        fileIn.close();

        return 0;
    }
}

1 个答案:

答案 0 :(得分:0)

处理各个行的一种方法是在读取每个值之前跳过前导空格,并在到达换行符时将流设置为失败状态。跳过并读取值后,当流良好时,显然没有新行。如果有换行符,处理行末的任何需要,请重置流(如果失败不是由于达到eof())并继续。例如,循环处理整数和跟踪当前行的代码可能是这样的:

int line(1);
while (in) {
    for (int value; in >> skip >> value; ) {
        std::cout << "line=" << line << " value=" << value << '\n';
    }
    ++line;
    if (!in.eof()) {
        in.clear();
    }
}

此代码使用自定义操纵符skip(),可以像这样实现:

std::istream& skip(std::istream& in) {
    while (std::isspace(in.peek())) {
        if (in.get() == '\n') {
            in.setstate(std::ios_base::failbit);
        }
    }
    return in;
}