Запись и вывод структуры - 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