Данные сохранены правильно, используя fprintf, но выводит странные значения - PullRequest
0 голосов
/ 05 марта 2019

Я создал структуру:

typedef struct aeroplane
{
  int seat;
  char rsv[10];
  char fName[20];
  char lName[20];
} AERO;

И создал массив в главной функции, а затем инициализировал ее:

#define ROWS 3
#define COLS 4

AERO arr[ROWS][COLS] =
  {
    {
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"}
    },
    {
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"}
    },
    {
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"},
      {0, "Empty", "NULL", "NULL"}
    }
  };

Я использовал эту функцию, чтобы сохранить массив в test.dat:

void save(AERO * arr, FILE * fp)
{
  for (int i = 0; i < ROWS; i++)
  {
    for (int j = 0; j < COLS; j++)
    {
      fprintf(fp, "%d %s %s %s\n",
      ((arr + i) + j) -> seat, ((arr + i) + j) -> rsv, ((arr + i) + j) -> fName, ((arr + i) + j) -> lName);
    }
    fprintf(fp, "\n");
  }
}

И вот что test.dat показывает:

0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL

0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL

0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL
0 Empty NULL NULL

, что выглядит так, как я хотел.

Однако, когда я использовал эту функциючтобы извлечь данные:

void read(AERO * arr, FILE * fp)
{
  for (int i = 0; i < ROWS; i++)
  {
    for (int j = 0; j < COLS; j++)
    {
      fscanf(fp, "%d %s %s %s",
      &((arr + i) + j) -> seat, ((arr + i) + j) -> rsv, ((arr + i) + j) -> fName, ((arr + i) + j) -> lName);
    }
  }
}

затем распечатывает их:

for (int i = 0; i < ROWS; i++)
  {
    for (int j = 0; j < COLS; j++)
    {
      printf("dummy[%d][%d]\nseat = %d\nrsv = %s\nfName = %s\nlName = %s\n\n",
      i, j, dummy[i][j].seat, dummy[i][j].rsv, dummy[i][j].fName, dummy[i][j].lName);
    }
  }

Вывод не соответствует тому, что я намеревался:

dummy[0][0]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[0][1]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[0][2]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[0][3]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[1][0]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[1][1]
seat = 0
rsv = Empty
fName = NULL
lName = NULL

dummy[1][2]
seat = 0
rsv =
fName =
lName = ▒▒

dummy[1][3]
seat = -2144188312
rsv =
fName =
lName =

dummy[2][0]
seat = 0
rsv =
fName =
lName =

dummy[2][1]
seat = 970037024
rsv = ▒
fName =
lName = ▒

dummy[2][2]
seat = -14080
rsv =
fName =
lName =

dummy[2][3]
seat = 31
rsv =
fName =
lName =

Я ожидал, что вывод3 строки и 4 столбца, как я уже определил.Но он возвращает не только меньшие значения, но и искаженные.Я что-то пропустил?

1 Ответ

0 голосов
/ 08 марта 2019

AERO[ROWS][COLS] несовместимо с AERO*. Включите предупреждения компилятора и учитывайте предупреждения . & Ndash; PMG

...