#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. Да, я этого не видел. Интересно 🙂