Запись и вывод структуры - C (СИ)
Формулировка задачи:
Здравствуйте! Объявил структуру глобально. На C++ все работает, а в C какие-то "кракозябры". Вот код (см. комментарии):
#include <iostream> #include <string> #include <fstream> #include <windows.h> using namespace std; int p; struct TRAIN //Объявляем структуру глобально { char* dest; char* trnum; char* time; } A[100]; void ReadInfo() { FILE *in; in = fopen("input.txt", "r"); char dest[100]; char trnum[100]; char time[100]; p = 0; while (fscanf(in, "%s %s %s", &dest, &trnum, &time) > 0) { A[p].dest = dest; A[p].trnum = trnum; A[p].time = time; printf("%s\n", A[p].dest); //Здесь структура выводится без проблем //printf("%s", A[p].trnum); //printf("%s", A[p].time); p++; } fclose(in); } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout << "Результат вызова функции:" << endl; ReadInfo(); //Записываем файл в структуру - все выводится for (int i = 0; i < p; i++) { printf("%s\n", A[i].dest); //А здесь какие-то непонятные символы } system("pause"); return 0; }
Решение задачи: «Запись и вывод структуры»
textual
Листинг программы
#include <stdio.h> #include <windows.h> struct TRAIN //Объявляем структуру глобально { char *dest; char *trnum; char *time; } A[100]; int p = 0; void ReadInfo() { FILE *in = NULL; in = fopen("input.txt", "r"); while (!feof(in)) { A[p].dest = malloc(30); A[p].trnum = malloc(10); A[p].time = malloc(10); fscanf(in, "%s %s %s", A[p].dest, A[p].trnum, A[p].time); p++; } fclose(in); } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); puts("Результат вызова функции:"); ReadInfo(); //Записываем файл в структуру - все выводится for (int i = 0; i < p; i++) { printf("%s %s %s\n", A[i].dest, A[i].trnum, A[i].time); } //Освобождаем память после работы for (int i = 0; i < p; i++) { free(A[i].dest); free(A[i].trnum); free(A[i].time); } }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру TRAIN глобально
- Создаем массив структур TRAIN размером 100
- Инициализируем переменную p нулем
- Определяем функцию ReadInfo для чтения информации из файла input.txt и записи ее в массив структур TRAIN
- В функции main устанавливаем кодировку консоли
- Выводим сообщение
Результат вызова функции:
- Зовем функцию ReadInfo для заполнения массива структур TRAIN данными из файла
- Используем цикл for для вывода содержимого массива структур TRAIN на экран
- Освобождаем память, выделенную под строки в структурах TRAIN
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д