计算文件中测验分数的平均值

问题描述 投票:0回答:1

每次我在 VS 中运行代码时,它都会给出总和为 0、计数为 0、平均值为:-nan(ind)。我认为该文件没有任何问题,因为我使用了 if(.fail) 并且不会收到错误消息。这是函数,当我将其调用到 main 中时。我可以解决这个问题吗?

void calculate_scores_average(double& average)
{
    ifstream in_stream;

    in_stream.open("studentnames_with_scores.txt");
    if (in_stream.is_open())
    {
        double number = 0;
        double  sum = 0;
        int count = 0;
        while (in_stream >> number)
        {

            sum = sum + number;
            count++;
        }

        cout << "\nsum is: " << sum << endl;
        cout << "count is: " << count << endl;
        average = sum / (double)count;

        in_stream.close();

    }
}

int main()
{
    
    double average;

    calculate_scores_average(average);
    
    cout << "\nThe average will be: " << average << endl;

    return 0;
}

c++ visual-c++
1个回答
0
投票

代码显示了早期学习的迹象,这很棒。研究修改后的代码,看看可以在哪里应用类似的技术来简化代码。 calculate_scores_average 函数做了太多事情;每个函数应该执行一个完整/连贯/一致的行为。使用多种功能实现多种行为。

#include <iostream>
#include <fstream>
using namespace std;

double calculate_scores_average() {
        ifstream in_stream("studentnames_with_scores.txt");
        if (in_stream.fail()) {
                cout << "Could not open file\n";
                return 0;
        }
        string name;
        double number = 0;
        double  sum = 0;
        int count = 0;
        while (in_stream >> name >> number) {
            sum = sum + number;
            count++;
        }

        cout << "\nsum is: " << sum << endl;
        cout << "count is: " << count << endl;
        if (count == 0)
                return 0;
        return sum / (double)count;
}

int main() {
    cout << "\nThe average will be: " << calculate_scores_average() << endl;
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.