Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268

Считать информацию с файла

28.04.2022, 18:59. Показов 647. Ответов 14
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <stdio.h>
using namespace std;
 
struct Table{
    char fullname [100];
    int group;
    int firstMarks[5];
    int secondMarks[5];
};
 
void ReadTable (Table *&data, int N);
 
 
int main() {
 
    int N = 5;
    Table *data = new Table[N]{
            {},
            {},
            {},
            {},
            {}
 
    };
 
    ReadTable(data, N);
 
 
}
 
 
void ReadTable (Table *&data, int N){
 
    FILE *fl = fopen("table.txt","r");
 
    if (!fl) {
        cout << "Помилка";
        exit(1);
    }
 
 
    for (int i = 0; i < N; i++) {
 
        fscanf(fl, "%s", data[i].fullname);
        fscanf(fl, "%i", data[i].group);
 
        for (int j = 0; j < N; j++) {
 
            fscanf(fl, "%i", data[i].firstMarks[j]);
            fscanf(fl, "%i", data[i].secondMarks[j]);
 
        }
 
    }
 
    fclose(fl);
 
    }
файл table.txt
Code
1
2
3
4
5
Новикова Аделина Максимовна | 1151 |  5 2 3 1 2 |  1 2 1 3 2
Воронина Анна Леоновна | 2151 |  2 4 3 2 1 |  5 4 5 5 4
Медведева Елена Михайловна | 4452 |  4 2 1 3 4 |  2 4 5 2 1
Зайцев Пётр Миронович | 1148 |  2 3 4 5 1 |  5 2 1 5 5
Кочергин Алексей Семёнович | 3252 |  4 4 3 4 5 |  2 1 3 4 2
Всем привет! Задача: есть таблица, одна строка таблицы соответствует одному студенту и содержит следующие сведения: ФИО студента, номер группы, экзаменационные оценки за первый семестр, экзаменационные оценки за второй семестр.

Как мне считать в мои переменные структуры информацию из файла? Мои попытки безуспешны, надеюсь на вашу помощь!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.04.2022, 18:59
Ответы с готовыми решениями:

Считать информацию с файла. Сравнить определенную информацию с файла, с информацией введенной с клавиатуры
В текстовом файле находиться информация нескольких человек: ФИО, профессия, образование, семейное положение, номер телефона. Нужно считать...

Как считать информацию из файла?
У меня есть несколько классов геометрических примитивов: эллипс, точка, прямоугольник, линия. У каждого я создал метод write который...

Не получается считать из файла информацию
У меня есть текстовый файл. Мне нужно считать в нем строчки, такого типа: qwert 12345 asdfghjk 213213 tgyhh 39482 Имена...

14
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 20:57
Цитата Сообщение от vadyansky Посмотреть сообщение
Мои попытки безуспешны
C++
1
fscanf(fl, "%s", data[i].fullname);
Это так не работает.
Как функция поймёт, где начинается и где кончается ФИО в строке?
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 21:01  [ТС]
Verevkin, мой код прикреплен, но я смог передать ФИО таким образом:
C++
1
fscanf(fl, "%[^|]", data[i].fullname);
Но все остальное не получается, и еще вопрос: как переходить на следующую строку? заработает ли
C++
1
fscanf(fl, "\n");
в конце цикла?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 21:12
Цитата Сообщение от vadyansky Посмотреть сообщение
Но все остальное не получается, и еще вопрос: как переходить на следующую строку?
Надо читать построчно, а потом парсить каждую строку по полям.
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 21:14  [ТС]
Verevkin, как это делать скажите пожалуйста, это можно средствами fprintf делать или это что-то другое?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 21:24
Цитата Сообщение от vadyansky Посмотреть сообщение
как это делать скажите пожалуйста, это можно средствами fprintf делать или это что-то другое?
Читай построчно в буфер, например, функцией fgets(), а потом разгребай этот буфер, как тебе больше нравится, попутно проверяя его корректность.
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 21:29  [ТС]
Verevkin, допустим, а как именно построчно читать?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 21:33
Цитата Сообщение от vadyansky Посмотреть сообщение
допустим, а как именно построчно читать?
Функция fgets() как раз этим и занимается. По ссылке, которую я тебе, балбесу, дал, даже пример есть.
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 21:40  [ТС]
Verevkin, , второй аргумент fgets() - максимальное количество символов для копирования в str (включая завершающий нулевой символ), что мне указывать чтоб по нормальному было? или написать 500 к примеру и не парится?

Добавлено через 3 минуты
Verevkin,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void ReadTable (Table *&data, int N, char myString[]){
 
    FILE *fl = fopen("table.txt","r");
 
    if (!fl) {
        cout << "Помилка";
        exit(1);
    }
 
 
 
    for (int i = 0; i < N; i++) {
 
        if ( fgets (myString , 500 , fl) != NULL )
            puts (myString);
 
        fscanf(fl, "%[^|]", data[i].fullname);
        fscanf(fl, "%d", data[i].group);
 
 
 
        for (int j = 0; j < N; j++) {
 
            fscanf(fl, "%i", data[i].firstMarks[j]);
            fscanf(fl, "%i", data[i].secondMarks[j]);
 
        }
 
        fscanf(fl, "\n");
 
    }
 
    fclose(fl);
 
    }
Вот я написал вот так, на 1 итерации цикла все норм, но на второй раз оно почему то пропускает ФИО?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 21:42
Цитата Сообщение от vadyansky Посмотреть сообщение
второй аргумент fgets() - максимальное количество символов для копирования в str (включая завершающий нулевой символ), что мне указывать чтоб по нормальному было? или написать 500 к примеру и не парится?
Указывай размер буфера, который ты передаёшь в эту функцию в первом параметре.
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 21:43  [ТС]
Verevkin, ну в первом параметре char MyString, с размером 500. Может можно как то более оптимизировано подбирать размер?
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 21:59
Цитата Сообщение от vadyansky Посмотреть сообщение
Может можно как то более оптимизировано подбирать размер?
Всё, ты меня устал.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <cstdlib>
#include <cstdio>
 
using namespace std;
 
int main(void)
{
    system("chcp 1251 > nul");
    char myString[512], *buf;
    FILE *fl = fopen("table.txt","r");
 
    if (!fl) 
    {
        printf("кек\n");
        return 1;
    }
    
    do
    {
      buf = fgets(myString, sizeof(myString) , fl);
      if (buf) 
      {
        printf("%s", buf);
        // здесь рагребай строку по полям структуры
      };
 
    } while (buf);
 
    fclose(fl);
    return 0;
}
Дальше сам давай, у меня дела хочу валяться на диване, пить чай и смотреть ютуб. Пост сдал.
0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 22:10  [ТС]
Verevkin, спасибо, а почему buf это указатель и как понимать do while (buf) и if(buf), тоесть делать пока buf, и если buf, скажи как это работает пожалуйста
0
Злостный нарушитель
 Аватар для Verevkin
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,687
28.04.2022, 22:15
Цитата Сообщение от vadyansky Посмотреть сообщение
а почему buf это указатель

Цитата Сообщение от vadyansky Посмотреть сообщение
скажи как это работает пожалуйста
У меня обед.

0
7 / 6 / 1
Регистрация: 04.10.2021
Сообщений: 268
28.04.2022, 22:16  [ТС]
Verevkin, ладно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2022, 22:16
Помогаю со студенческими работами здесь

Как считать информацию с файла
Помогите пожалуйста разобраться с файлами. При считывании из файла в методе void Users::LoadFile() (Файл Users.cpp) попадаю в бесконечный...

Считать информацию из с файла массив посимвольно
с++ как достать инфу с файла, и забить в массив по-символьно?

Записать и считать информацию из бинарного файла
Здравствуйте уважаемые программисты. Дано задание: Написать программу,которая создает в каталоге 2 файла - текстовый и бинарный,и...

getline() (не получается считать информацию с файла)
Здравствуйте. У меня есть файл вида: volleyball 1 sports.ru 500 volleyball football Первая строка - искомый тег, вторая -...

Как считать информацию с текстового файла?
Нужна помощь! Мне необходимо создать пользовательскую функцию, которая будет считывать информацию с текстового файла.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru