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

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем структуру TRAIN глобально
  3. Создаем массив структур TRAIN размером 100
  4. Инициализируем переменную p нулем
  5. Определяем функцию ReadInfo для чтения информации из файла input.txt и записи ее в массив структур TRAIN
  6. В функции main устанавливаем кодировку консоли
  7. Выводим сообщение Результат вызова функции:
  8. Зовем функцию ReadInfo для заполнения массива структур TRAIN данными из файла
  9. Используем цикл for для вывода содержимого массива структур TRAIN на экран
  10. Освобождаем память, выделенную под строки в структурах TRAIN

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы