Есть ли проблема с этим кодом? Иногда я получаю правильный ответ, а иногда действительно большое число - PullRequest
0 голосов
/ 09 июля 2019

Иногда я получаю правильный ответ, например, когда я ввожу 87 и 3, он возвращает мне 261, but when I exit the program and re-run it, sometimes it returns 45481185383493847891312640.000000` или какой-то другой сумасшедший номер.

#include <stdio.h>

int main() {
    float pts = 0;
    float avg;
    float grade;
    float total;
    int f = 1;

    while (f == 1) {
        printf("Choose a Course Grade, and the amount of points that the course is worth: \n"
               "Enter -1 at the beginning if you want to exit\n");
        scanf("%f %f", &grade, &avg);
        if (grade == -1) {
            break;
        }
        pts += avg;
        total += (avg * grade);
        printf("%f\n", total);
    }
    printf("%f\n", (total / pts));
}

1 Ответ

3 голосов
/ 09 июля 2019

Программа имеет неопределенное поведение, поскольку локальная переменная total не инициализирована.

Инициализируйте его как 0 и проверьте возвращаемое значение scanf(), чтобы избежать неопределенного поведения, которое объясняет ваши наблюдения.

Вот исправленная версия:

#include <stdio.h>

int main() {
    float pts = 0.0;
    float total = 0.0;
    float avg;
    float grade;

    for (;;) {
        printf("Enter a Course Grade or -1 to exit: ");
        if (scanf("%f", &grade) != 1 || grade == -1)
            break;
        printf("Enter a the amount of points that the course is worth: ");
        if (scanf("%f", &avg) != 1)
            break
        pts += avg;
        total += avg * grade;
        printf("%f\n", total);
    }
    printf("%f\n", total / pts);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...