该程序的重点是打开和阅读文本文件,其中包含学生的学术代码-> aem和他/她的总成绩。然后,如果特定学生的成绩大于5,它将在名为成功的文本以及成绩等上写下他/她的学术代码。
我的问题是,它可以正确计算这5个学生的平均成绩,但不能计算最高和最低成绩。当我运行程序时,出现的窗口将显示正确的课程平均值,但是最高和最低成绩始终为0。
谁能帮我?可能我没有以正确的方式比较它们。
#include <iostream>
#include <fstream>
using namespace std;
const int arraySize = 5;
int main(int argc, char** argv)
{
ifstream d;
d.open("students.txt");
ofstream b;
b.open("succesful.txt");
ofstream c;
c.open("unsuccesful.txt");
int aem;
double a[arraySize];
int min, max;
double grades, average;
grades = average = 0;
min = max = 0;
for (int i = 0; i < arraySize; i++)
{
d >> aem >> a[i];
grades = grades + a[i];
average = grades / arraySize;
if (a[i] >= 5) b << aem << " " << a[i] << endl;
else c << aem << " " << a[i] << endl;
}
for (int i = 0; i < arraySize; i++)
{
if (a[i] = max)
max = a[i];
break;
if (a[i] = min)
min = a[i];
break;
}
cout << "The average is:" << average;
cout << "Maximum is:" << max;
cout << "Minimum is:" << min;
d.close(); c.close(); b.close();
system("pause");
return 0;
}
最佳答案
int main(int argc, char** argv)
不需要
argc
和argv
在这里。可以只是int main()
。int min, max;
double grades, average;
grades = average = 0;
min = max = 0;
声明后分配值是不必要的,效率低下。另外,
0
是整数,而不是浮点数。您可以初始化它们:int min = 0, max = 0;
double grades = .0, average = .0;
grades = grades + a[i];
可以缩短为
grades += a[i];
average = grades / arraySize;
该语句毫无意义地位于for循环内。您可以在循环后执行此操作。
for (int i = 1; i < arraySize; i++) {
您忘记了
a
的第零个元素。 int i = 1;
必须替换为int i = 0;
if (i >= max)
max = i;
if (i <= min)
min = i;
您将
a[i]
误认为是i
。并且,如果a[i]
和max
已经比较相等,则无需将a[i]
分配给max
。它们可以是:if (a[i] > max)
max = a[i];
if (a[i] < min)
min = a[i];
和,
system("pause");
std::system
取决于系统环境,并且可能具有意外行为。它应该替换为:std::cout << "Press enter key." << std::endl;
std::cin.get();
关于c++ - 不计算程序中的最低和最高成绩。 (c++)(fstream),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41696074/