2017-12-19 1 views
-1

거기에 뭔가 잘못되었습니다. 나는 진정한 학급 평균을 얻어야하고, 얼마나 많은 사람들이 시험에서 B C D F를 얻는지를 써야합니다.거기에 뭔가 잘못 됐습니다. 나는 진정한 학급 평균을 얻어야하고 얼마나 많은 사람들이 도착 하는지를 써야합니다. B C D F 시험에서 나를 도와주세요?

#include <stdio.h> 

int main() { 
    int sum, stu, ort, grade, i; 
    printf("how many students in the class?"); 
    scanf("%d", &stu); 
    for (i = 1; i <= stu; i++) { 
    printf("enter a score"); 
    scanf("%d", &grade); 
    if (grade < 20) 
     printf("Not: F\n", grade); 
    else if (grade < 40) 
     printf("Grade: D\n", grade); 
    else if (grade < 60) 
     printf("Grade: C\n", grade); 
    else if (grade < 80) 
     printf("Grade: B\n", grade); 
    else if (grade < 100) 
     printf("Grade: A\n", grade); 
    } 
    sum += grade; 
    ort = (sum)/(stu); 
    printf("medium= %d", ort); 
} 
+2

정확히 무엇이 잘못 되었나요? 'sum'을 0으로 초기화하십시오. –

+2

"Something wrong"=> 문제의 명확한 설명이 아닙니다. – Stargateur

+1

1)'sum'을 초기화해야합니다. 2)'sum + = grade; '가 루프 안에 들어가야합니다. –

답변

2

내가보기에 두 가지 문제점이 있습니다.

  1. sum은 초기화되지 않으므로 초기 값은 불확정합니다.

    정교화하기 위해 sum은 자동 저장 로컬 변수이며 명시 적으로 초기화하지 않는 한 불확정 값을 포함합니다.

    지금, 여기에 사용을보고, sum += grade;는 장 §6.3.2.1에 따라 undefined behavior를 호출 C11

    [...]를 좌변이 수 있었다 자동 스토리지 기간의 오브젝트를 지정 경우 은 레지스터 저장 클래스 (주소가 저장되지 않음)로 선언되고 해당 객체 은 초기화되지 않습니다 (초기화 프로그램으로 선언되지 않고 사용 전에 수행 된 의 할당이 없음). 동작은 정의되지 않습니다.

  2. 추가 sum += grade;은 루프 내부에 있어야합니다. 그렇지 않으면 루프에서 항목을 누적 할 수 없습니다.

그렇다면 항상 작업의 성공을 보장하기 위해 scanf()의 반환 값을 확인하십시오. 그렇지 않으면, 당신은 불특정 행동으로 끝날 수 있습니다.

+0

나는 또한 오트가 목적으로 float 또는 double로 더 잘 선언되었다고 믿습니다. – Srdjan

2
if (grade < 20) 
     printf("Not: F\n", grade); 
    else if (grade < 40) 
     printf("Grade: D\n", grade); 
    else if (grade < 60) 
     printf("Grade: C\n", grade); 
    else if (grade < 80) 
     printf("Grade: B\n", grade); 
    else if (grade < 100) 
     printf("Grade: A\n", grade); 

코드의이 부분에는 전혀 등급이 적용되지 않습니다. , grade 부분을 삭제하거나 "%d"을 형식에 추가해야합니다.

관련 문제