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

Чтение информации из файла

27.11.2020, 11:56. Показов 592. Ответов 0

Студворк — интернет-сервис помощи студентам
Нужно написать программу на подобии телефонного справочника, только в качестве данных будет использоваться информация о сутдентах. Входящий файл сохраняет следующую информацию про студентов:
<фамилия>, <имя>, <отчество>, <год рождения>, <курс>, <пол>;
где ФИО не превышают 12 символов, пол указывается символами М или Ж, год рождения целое число из 4-х цифр, а курс целое число от 1 до 5. Все данные о студентах разделены «;» и хранятся в одной строке файла.
Пример файла:
Иванов, Иван, Иванович, 1999, 1, Ч; Семёнов, Семён, Семёнович, 2000, 4, Ч; Стульчак, Татьяна, Ивановна, 2001, 3, Ж; Крапоткина, Алина, Георгиевна, 2003, 1, Ж; Тучков, Пётр, Александрович, 2003, 1, Ч;
Но уже на этапе чтения и записи информации из файла возникли некоторые проблемы. Я создал функцию, которая должна записать всю информацию с файла в структуру. Для этого сначала записываю информацию из файла в строку, а затем эту строку разбиваю на лексемы, убираю пробелы с разделителями и присваиваю каждому полю структуры ту или иную лексему. На 57 строке я добавил printf("Line: %s\n", line); чтобы видеть увидеть, что информация записывается в переменную line. После выполнения функции в main я вывожу по очереди каждое поле структуры в консоль. И всё работает отлично до тех пор пока, я не удаляю printf("Line: %s\n", line); из 57-й строки. В консоль начинают выводиться неопознанные символы. Не знаю где ошибка, при записи информации из файла или при выведении в консоль. Помогите разобраться.

P.S. Можно использовать только стандартные заголовочные файлы из C/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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cctype>
using namespace std;
 
typedef struct {
  char *surname;  // Фамилия
  char *name;     // Имя
  char *patronymic;   // Отчество
  int birth;      // Год рождения
  int course;     // Номер курса
  char *gender;   // Пол
} Student;
 
// Максимальное кол-во студентов в журнале
const int MAXSTUDENTS = 1000;
 
// Массив записей
static Student records[MAXSTUDENTS];
 
// Текущее кол-во записей в журнале
static int numRecords = 0;
 
static bool loadJournal();  // Загрузить журнал из файла
 
int main() {
  printf("Программа «Журнал»\n");
  loadJournal();  // Загрузить содержание книжки из файла
 
  for (int i = 0; i < numRecords; i++) {
    printf("%s, \t", records[i].surname); 
    printf("%s, \t", records[i].name);
    printf("%s, \t", records[i].patronymic);
    printf("%d, \t", records[i].birth);
    printf("%d, \t", records[i].course);
    printf("%s;\n", records[i].gender);
  }
 
  return 0;
}
 
static bool loadJournal() {
  char line[512];    // Буфер для введения строки
  FILE *f;    // Структура, которая описывает файл
 
  f = fopen("Journal.txt", "rt");
  if (f == NULL) {
    perror("Не удаётся открыть файл для чтения");
    return false;
  }
 
  // Читает данные из файла
  // и записывает их в строку
  fgets(line, 512, f);
  printf("Line: %s\n", line);
 
  // Разбивает строку на лексемы
  // и присваивает их качестве значений полям структуры
  char *token = strtok(line, ", ;");
  int i = 0;
  while (token != NULL) {
    if (i == 0) records[numRecords].surname = token;
    if (i == 1) records[numRecords].name = token;
    if (i == 2) records[numRecords].patronymic = token;
    if (i == 3) records[numRecords].birth = stoi(token);
    if (i == 4) records[numRecords].course = stoi(token);
    if (i == 5) records[numRecords].gender = token; 
  
    i++;
    token = strtok(NULL, ", ;");
  
    if (i > 5) {
      i = 0;
      numRecords++;
    }
  }
 
  fclose(f);
 
  return true;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2020, 11:56
Ответы с готовыми решениями:

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

Чтение информации из файла
В программе надо записать данные в карточку потом их записать в файл,а потом организовать считывание информации с файла.Так вот считывание...

Чтение информации из файла
// #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;iomanip&gt; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2020, 11:56
Помогаю со студенческими работами здесь

Чтение и вывод информации из файла
Имеется текстовый файл zarplaty.txt. Необходимо вывести содержимое файла на экран в консоль.(объясните ещё как с русским языком обстоит...

Чтение информации для вектора структур, из бинарного файла
Добрый день, есть у меня класс, что-то вроде электронного реестра, данные хранятся в виде структуры, а те, в свою очередь, помещены в...

Чтение и сортировка информации из файла
Имеется 3 текстовых файла со следующей информацией: 1) 11 5 7 *********** 0 0 2 33 45 88 21 3 9 *********** 1 2 3 44 52 32 ...

Переписать код с C# - чтение информации из бинарного файла
Есть код приведенный на одном из стороннем форуме, который читает данные из бинарного файла. Как мне его под билдер переписать? Вот...

Отображение файла на память (чтение и запись информации)
Короче нужно из одного файла переписать в другой используя отображение на память а у меня почему то создаётся пустой файл такого же...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Переходник 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