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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2022, 17:29   #1
ok.ko19
Пользователь
 
Регистрация: 15.10.2021
Сообщений: 19
По умолчанию Робота с файлами, я не понимаю, где ошибка (Си)

Создать файл, записать информацию про студентов (в программе пишет какую именно), потом занести у другой файл информацию про студентов, средний бал которых выше за 4.76
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
 
#define N 20
#define M 1
#define X 4.76
 
struct data1
{
    char lastname1[N], birthday1[N];
    int numGroup1;
    float bMath1, bUkr1, bChemistry1, bBiology1, bPhysical1, average1;
};
struct data2
{
    char lastname2[N], birthday2[N];
    int numGroup2;
    float bMath2, bUkr2, bChemistry2, bBiology2, bPhysical2, average2;
};
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    FILE* file1, * file2;
    struct data1 a[M];
    struct data2 b[M];
    file1 = fopen("D:\\S1.txt", "w");
    for (int i = 0; i < M; i++)
    {
        printf("Введите фамилию, номер группы, бал с математики, с языка, с химии, с биологии и с физкультуры, также день рождения:\n");
        scanf("%s %d %f %f %f %f %f %s", a[i].lastname1, &a[i].numGroup1, &a[i].bMath1, &a[i].bUkr1, &a[i].bChemistry1, &a[i].bBiology1, &a[i].bPhysical1, a[i].birthday1);
        fprintf(file1, "%s %d %.2f %.2f %.2f %.2f %.2f %s %.2f\n", a[i].lastname1, a[i].numGroup1, a[i].bMath1, a[i].bUkr1, a[i].bChemistry1, a[i].bBiology1, a[i].bPhysical1, a[i].birthday1);
        a[i].average1 = (a[i].bMath1 + a[i].bUkr1 + a[i].bChemistry1 + a[i].bBiology1 + a[i].bPhysical1) / 5;
        fprintf(file1, "Средний бал студента - %.2f.\n\n", a[i].average1);
    }
    fclose(file1);
    file1 = fopen("D:\\S1.txt", "r");
    file2 = fopen("D:\\S2.txt", "w");
    printf("Переносимо данные про студентов, средний бал которых выше 4,76: \n\n");
    for (int i = 0; i < M; i++)
    {
        fscanf(file1, "%s %d %f %f %f %f %f %s %f", b[i].lastname2, &b[i].numGroup2, &b[i].bMath2, &b[i].bUkr2, &b[i].bChemistry2, &b[i].bBiology2, &b[i].bPhysical2, b[i].birthday2, &b[i].average2);
                if(b[i].average2 > X)
                   fprintf(file2, "%s %d %.2f %.2f %.2f %.2f %.2f %s %.2f\n\n", b[i].lastname2, b[i].numGroup2, b[i].bMath2, b[i].bUkr2, b[i].bChemistry2, b[i].bBiology2, b[i].bPhysical2, b[i].birthday2, b[i].average2);
    }
    fclose(file1);
    fclose(file2);
}
ok.ko19 вне форума Ответить с цитированием
Старый 21.05.2022, 19:32   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,537
По умолчанию

Как проявляется ошибка? Не компилируется? Работает, но неправильно?
digitalis вне форума Ответить с цитированием
Старый 21.05.2022, 20:07   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

В первом цикле у fprintf в строке формата 9 аргументов, а самих аргументов только 8. В этом же цикле средний балл печатается отдельной строкой, а во втором цикле данные считываются так, будто фразы "Средний бал студента" в файле нет.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Робота с файлами(C#) JordanV Помощь студентам 1 25.05.2020 08:09
Робота с файлами С++ Ira20 Помощь студентам 2 22.03.2012 22:52
робота с файлами Trofik9 Паскаль, Turbo Pascal, PascalABC.NET 0 12.06.2010 16:25
Робота с файлами maloy-rom Помощь студентам 2 09.06.2009 11:46
Робота с файлами maloy-rom Помощь студентам 2 07.06.2009 17:35