Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2023, 23:11   #1
Artewka
Новичок
Джуниор
 
Регистрация: 12.02.2023
Сообщений: 1
Вопрос Помогите с программой на С

Добрый день, должно выводить учеников у кого средний бал >4 и средний бал всей группы, но выводит отрицательную фигню
Код:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>

struct STUDENT
{
    char FIO[15];
    char oc[7];
};

int main()
{
    setlocale(LC_ALL, "Russian");
    FILE* f;
    struct STUDENT tz;
    int i;
    int s = 0;
    float srball = 0;
    fopen_s(&f, "st.txt", "r");
    	if ((f == NULL))
    	{
    		printf("Файл st.txt не найден");
            return 0;
    	}
    puts("\nF.I.O.     Count two");
    puts("--------------------");
    while (fgets((char*)&tz, sizeof(struct STUDENT), f) != NULL)
    {
        for (i = 0; i < 5; i++) {
            s +=(tz.oc[i]);
        }
        srball += float(s) / 5;

        if (float(s)/5 < 4){ printf("\n%s %f", tz.FIO, float(s) / 5); }
        s = 0;
    }
    printf("\n Средний бал группы = %f", srball/5);
    fclose(f);
}
Пример входного файла:
Код:
Anisimov 55555
Ivanov  43344
Sidorov 52345
Вложения
Тип файла: txt st.txt (48 байт, 1 просмотров)

Последний раз редактировалось BDA; 13.02.2023 в 02:26.
Artewka вне форума Ответить с цитированием
Старый 13.02.2023, 02:33   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вы должны определиться, у вас входной файл текстовый или типизированный. А то вы его читаете fgets'ом, как текстовый, но ожидаете, что поля структуры STUDENT магическим образом верно заполнятся, будто в файле хранятся структуры.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.02.2023, 03:51   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Код:
#include <stdio.h>

#define FILE_NAME "st.txt"

float average_mark(const char* marks) {
  int i;
  int sum = 0;
  int count = 0;

  for (i = 0; marks[i] != '\0'; i++) {
    if (('0' <= marks[i]) && (marks[i] <= '9')) { /* если i-ый элемент -- цифра */
      sum += marks[i] - '0';
      count++;
    }
  }
  return (count != 0 ? (float)sum / count : 0.0f);
}

int main() {
  FILE* file;
  char surname[100];
  char marks[100];
  float aver_mark, group_aver_mark = 0;
  int students_count = 0;

  file = fopen(FILE_NAME, "rt");
  if (file == NULL) {
    printf("Cannot open file \"%s\".\n", FILE_NAME);
    return 1;
  }
  while (fscanf(file, "%s %s", surname, marks) == 2) {
    aver_mark = average_mark(marks);
    if (aver_mark > 4) {
      printf("%s: %f\n", surname, aver_mark);
    }
    group_aver_mark += aver_mark;
    students_count++;
  }
  fclose(file);
  if (students_count != 0) {
    group_aver_mark /= students_count;
  }
  printf("Group average mark: %f\n", group_aver_mark);
  return 0;
}
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с программой jhon_jhonson C++ Builder 0 07.10.2013 10:04
Помогите с программой KillJoy Помощь студентам 1 11.11.2009 19:30
Помогите с программой Mishkaplus Помощь студентам 9 06.01.2009 14:09
Помогите с программой Panda Помощь студентам 4 07.07.2008 18:13