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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2021, 17:23   #1
Darkus2
Новичок
Джуниор
 
Регистрация: 09.11.2021
Сообщений: 2
Вопрос Проблема с работой с файлом в Си

Краткая суть задания: Есть файл с номером студента, номер предмета, оценка
Код должен считать построчно файл, посмотреть все оценки студента и решить какая у него будет стипендия.

Пример строк из файла:
1000001, 258901, 5
1000002, 258901, 5
1000003, 258901, 4
1000004, 258901, 4
1000005, 258901, 4
1000001, 258902, 5
1000002, 258902, 5
1000003, 258902, 5
1000004, 258902, 4
1000005, 258902, 3
"номер студента", "номер предмета", "оценка".

После передачи данных в функцию main_information_of_student код перестает работать. Не понимаю в чем причина.

P.s. Прикрепил, что выводит в консоль.
P.s.s. Используются небезопасные функции, по типу: "fgets". В настройках программы прописал "_CRT_SECURE_NO_WARNINGS"
P.s.s.s. К тому же, много вылетает варнингов, которые я так же прикрепил внизу.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

// Основные переменные | кол-во студентов и кол-во предметов
int         count_students, count_subjects;
int         len_id_student, len_id_subject, len_of_file;
int         id_student_1, id_student_2;
int         index_of_mark, student_mark;
char        u;
// Переменная для подсчета среднего балла сдачи экзаменов
int         sum_good_marks = 0;
// Переменная для записи строки из файла
char        string_file[1000];
char        string_file_1[1000];
// Переменные для циклов
int         index = 0, index_1 = 0;
// Переменная для считывания строки из файла
char        str_id_student_1[20], str_id_student_2[20];


int main_information_of_student(char* student, int* len_of_file)
{
    // обнуление памяти в str_id_student
    memset(str_id_student_1, 0, sizeof(str_id_student_1));

    // преобразует string в int, получает номер студента
    id_student_1 = atoi(strncat(str_id_student_1, student, len_id_student));

    // Открываем файл
    FILE* r;
    r = fopen("C://Users//SolEk//OneDrive//Рабочий стол//LABACH_TEST.txt", "r");
    do
    {
        // Считываем строку 
        //scanf("%s", &student_information_2[100]);
        fgets(string_file_1, 1000, r);

        // Обнуляем память в переменной, чтобы избежать сохранения старых данных
        memset(str_id_student_2, 0, sizeof(str_id_student_2));

        // Находим повторяющиеся номера студента
        id_student_2 = atoi(strncat(str_id_student_2, string_file_1, len_id_student));

        // Находим индекс оценки 
        index_of_mark = len_id_student + len_id_subject + (2 * 2); // Если есть "," или " ", то мы записываем так.

        // Если id совпадают -> один и тот же студент -> добавляем его оценки в общую переменную //
        if (id_student_1 == id_student_2)
        {
            student_mark = atoi(string_file_1[index_of_mark]);

            if (student_mark == 5)
            {
                sum_good_marks += 1;
            }
            else if (student_mark == 4)
            {
                printf("Студент: %d\n- Обычная степендия\n", id_student_1);
                break;
            }
            else if (student_mark == 3 || student_mark == 2 || student_mark == 1 || student_mark == 0)
            {
                printf("Студент: %d\n- Нет степендии\n", id_student_1);
                break;
            }
            if (sum_good_marks == count_subjects)
            {
                printf("Студент: %d\n- Удвоенная степендия\n", id_student_1);
            }
        }
        index_1++;
    } while (index_1 < len_of_file);

    return 0;
}


int main() 
{
    // Поддержка русского языка в консоли
    char* locale = setlocale(LC_ALL, "");

    // Считываем файл
    FILE* f;
    f = fopen("C://Users//SolEk//OneDrive//Рабочий стол//LABACH_TEST.txt", "r");

    // Запрашиваем основную информацию 
    printf("Введите кол-во студентов:");
    scanf_s("%d", &count_students);
    printf("Введите кол-во предметов:");
    scanf_s("%d", &count_subjects);

    // Спрашиваем длину номера студента
    printf("Введите длину номера студента (к примеру ID 16514 - длина 5): ");
    scanf_s("%d", &len_id_student);
    printf("Введите длину кода предмета (к примеру 023 - длина 3): ");
    scanf_s("%d", &len_id_subject);

    len_of_file = count_students * count_subjects;

    // Считываем строку и закидываем в функцию main_information_of_student
     do
     {
         if (fgets(string_file, 1000, f) != NULL)
         {
             main_information_of_student(string_file, len_of_file);
         }
         index++;
     } while (index < len_of_file);
    
     fclose(f);

    return 0;
}
Изображения
Тип файла: png 1.png (12.4 Кб, 0 просмотров)
Тип файла: png 2.png (37.5 Кб, 1 просмотров)
Darkus2 вне форума Ответить с цитированием
Старый 09.11.2021, 17:28   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Для начала подключите необходимые хедеры.
ForenLi вне форума Ответить с цитированием
Старый 09.11.2021, 17:42   #3
Darkus2
Новичок
Джуниор
 
Регистрация: 09.11.2021
Сообщений: 2
По умолчанию

ForenLi, А не подскажете как? И что это такое?
Darkus2 вне форума Ответить с цитированием
Старый 09.11.2021, 17:45   #4
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
#include <stdio.h>
Вот это нафига вы написали?
ForenLi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа с работой с файлом Julichitai Помощь студентам 0 17.12.2015 20:59
Проблема между swich и работой с файлом artemoning Общие вопросы C/C++ 1 04.10.2012 15:04
Проблема с работой программ Девушка_Мария Общие вопросы C/C++ 2 08.12.2009 17:58