2017-01-17 11 views
-1

Цель этой программы - открыть и прочитать текстовый файл, с академическим кодом ученика -> aem и оценкой, которую он/она имеет в целом. Затем, если класс конкретного ученика больше 5, он напишет свой академический код в тексте с успешным успехом, а также в классе и т. Д. . Моя проблема заключается в том, что он правильно вычисляет среднее значение из этих 5 учеников но он не вычисляет максимальные и минимальные оценки. Когда я запускаю программу, окно вверх, показывает правильное среднее значение курса, однако максимальные и минимальные оценки всегда равны 0. Может ли кто-нибудь мне помочь? Вероятно, я не сравниваю их правильно.Не вычисляет минимальные и максимальные оценки в программе. (C++) (fstream)

#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; 
} 
+1

Пожалуйста, введите код в виде текста, а не изображения. – Rakete1111

+0

Ваш последний цикл ничего не делает, кроме установки 'a [1]' 'max' (' 0'). Подумайте об этом, это поможет вам найти проблему :) – Rakete1111

+0

Нужно ли мне каким-то образом сравнивать их? Раньше, для функции? –

ответ

2
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 (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(); 
Смежные вопросы