2017-01-17 8 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) 

여기있을 필요 argcargv 없습니다. 그냥 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의 0 요소를 잊어 버렸습니다. int i = 1;는 당신은 i 착각 a[i]을했습니다 int i = 0;

if (i >= max) 
    max = i; 
if (i <= min) 
    min = 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();