Вывести среднее значение оценок студента, у кого есть двойки - C (СИ)
Формулировка задачи:
ребят помогите не могу понять в чем проблема у меня. программа должна высчитывать среднее значение у кого есть хотя бы одна оценка 2. мало того не считает так еще и иероглифы какие то. помогите пожалуйста
Решение задачи: «Вывести среднее значение оценок студента, у кого есть двойки»
textual
Листинг программы
FILE *f;
struct STUDENT tz;
int i, k, s, j;
char buff[36];
if ((f = fopen("ASDDSA.TXT", "r")) == NULL)
{
puts(" fale ASDDSA.TXT He Hau`geH");
return 0;
}
puts("\nFamiliya I.O. Sr. Ball Ocenki");
puts("---------------------------");
while (fgets(buff, sizeof(char) * 36, f) != NULL)
{
int flg = 0;
for(int i=0; buff[i+1]!='\0'; i++){
if(buff[i]==' '){
flg++;}
if(flg!=2){
tz.fio[i]=buff[i];
tz.fio[i+1]='\0';}
if(flg==2){
tz.oc[i - strlen(tz.fio) - 1]=buff[i];
tz.oc[i - strlen(tz.fio)]='\0';}
}
for (i = 0, s = 0, k = 0; i < 5; i++)
{
if (tz.oc[i] == '2')
s += tz.oc[i] - '0';
k++;
}
if (k != 0)
{
tz.fio[14] = '\0';
printf("%s %.1f \n", tz.fio, (float)s / 5);
for (j = 0; j < 5; j++)
printf(" %c", tz.oc[j]);
printf("\n");
}
}
fclose(f);
getch();
Объяснение кода листинга программы
Объяснение действий в коде:
- Открытие файла: В этом блоке кода используется функция
fopen()для открытия файлаASDDSA.TXTв режиме чтения. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает работу. - Вывод заголовка: В этом блоке кода выводится заголовок таблицы с помощью функции
puts(). - Чтение данных из файла: В этом блоке кода используется цикл
while, который продолжается до тех пор, пока функцияfgets()не вернетNULL, что происходит при достижении конца файла. Функцияfgets()считывает строку из файла в буферbuff. - Обработка данных: В этом блоке кода происходит обработка считанной строки. Сначала определяется количество пробелов в строке, затем оценки студента (в формате
22 21 20 19 18) записываются в массивtz.oc, а фамилия и инициалы студента (в форматеИванов И.О.) записываются в массивtz.fio. - Подсчет количества двоек: В этом блоке кода подсчитывается количество двоек в оценках студента.
- Вывод информации о студенте: Если количество двоек не равно нулю, то выводится фамилия и инициалы студента, а также среднее значение его оценок. После этого выводятся сами оценки студента.
- Закрытие файла: В этом блоке кода используется функция
fclose()для закрытия файла. - Ожидание нажатия клавиши: В этом блоке кода программа ожидает, пока пользователь не нажмет клавишу, с помощью функции
getch().