2017-12-19 1 views
-1

Da stimmt etwas nicht, ich muss einen wahren Klassendurchschnitt bekommen und schreiben, wie viele Leute in den Prüfungen A B C D F bekommen.Irgendwas falsch darin muss ich wahrer Klassendurchschnitt bekommen und schreiben, wie viele Leute A B C D F in den Prüfungen bekommen, bitte helfen Sie mir?

#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

Was genau schief geht? Initialisiere "Summe" auf Null. –

+2

"Etwas falsch" => ist keine klare Beschreibung des Problems – Stargateur

+1

1) 'sum' muss initialisiert werden. 2) 'sum + = grade;' sollte innerhalb der Schleife gehen. –

Antwort

2

Es gibt zwei Probleme, wie ich es sehe.

  1. sum nicht initilaized, so ist es Anfangswert unbestimmt ist.

    Um zu erarbeiten, sum ist eine automatische Speicher lokale Variable und wenn nicht explizit initialisiert, enthält es unbestimmten Wert.

    nun die Verwendung hier zu sehen, ruft sum += grade;undefined behavior gemäß Kapitel §6.3.2.1, C11

    [....] Wenn der L-Wert ein Objekt der automatischen Speicherdauer bezeichnet, die gewesen sein könnte deklariert mit der Speicherklasse des Registers (hatte noch nie seine Adresse), und das Objekt ist nicht initialisiert (nicht mit einem Initialisierer deklariert und keine Zuordnung wurde vor der Verwendung durchgeführt), das Verhalten ist nicht definiert.

  2. Der Zusatz sum += grade; muss innerhalb der Schleife liegen. Sonst wird es nicht möglich sein, die Einträge aus den Schleifen zu sammeln.

Das heißt, überprüfen Sie immer den Rückgabewert von scanf() und Familie den Erfolg der Operation zu gewährleisten. Andernfalls haben Sie möglicherweise nicht spezifiziertes Verhalten.

+0

auch glaube ich, ort ist besser als float oder double für den Zweck erklärt – 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); 

In diesem Teil des Codes verwenden Sie überhaupt keine Note. Sie müssen den , grade Teil löschen oder innerhalb des Formats "%d" hinzufügen.

Verwandte Themen