Входные данные, которые я предоставляю своему %f, не сохраняются

#c #math #average

Вопрос:

gradeOne и secondGrade не сохраняют номер, который я даю. Поэтому я не могу иметь среднее значение , потому что, всегда заканчивайте делением на (0 0)/2, может ли кто-нибудь помочь мне?

     #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    int students;
    char name[50];
    double gradeOne, secondGrade, classAverage = 0, average = 0;

    for(students = 1;students <= 15; students  ){
        printf("Tell me Your name: n");
        fflush(stdin);
        scanf("%[^n]s", amp;name);
        //saves name
        printf("Tell me your first grade: n");
        scanf("%f", amp;gradeOne);
        printf("Tell me your second grade: n");
        scanf("%f", amp;secondGrade);
        //saves grade


        printf("n========================================n");

        printf("Student: %sn", name);
        printf("First Grade: %3.2f nSecond Grade: %3.2f n", gradeOne, secondGrade);
        printf("%f", average);

        printf("n========================================n");

        average = (gradeOne   secondGrade)/2;
        //creates average
        printf("Average of the %d student: %3.2f",students, average);

        classAverage  = average;
        //creates class average

    }
        classAverage = classAverage / (students - 1);
        printf("The class average was: %3.2f", classAverage);

    return 0;
}
 

Комментарии:

1. Поведение fflush(stdin); не определено. Как только ваша программа продемонстрировала неопределенное поведение, нет смысла в дальнейшем анализе.

2. scanf("%[^n]s", amp;name) это неверно. Почти наверняка вы намеревались использовать "%[^n]" . С завершением s , если следующая строка ввода начинается с s , она будет сопоставлена и использована этим.

3. Я предлагаю " %[^n]" , и так и должно быть name , а не amp;name

4. Используй scanf(" I[^n]", name) , иначе с таким же успехом можно использовать зло gets() .

5. @WilliamPursell «С завершающим s, если следующая строка ввода начинается с s» неверно. "%[^n]" потребляет любые 's' входные данные. Вход "s" "%[^n]s" -это лишнее.

Ответ №1:

%f в scanf() предназначен для чтения float . Вам следует использовать %lf для чтения double .

Обратите внимание, что вы должны использовать %f printf() для печати double . Более новая спецификация допускает %lf printf() , но %f должна быть лучше для совместимости.

Комментарии:

1. Об этом тоже стоит упомянуть: scanf("%[^n]s", amp;name);

2. @TedLyngmo Тогда тоже fflush(stdin);

3. Да, я этого не видел. Интересно 🙂