每次我在 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;
}
代码显示了早期学习的迹象,这很棒。研究修改后的代码,看看可以在哪里应用类似的技术来简化代码。 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;
}