Мой массив не появляется в моем текстовом файле, когда я пытаюсь прочитать его из моего двоичного файла - PullRequest
0 голосов
/ 12 марта 2019
#include<stdio.h>
#include<conio.h>

typedef struct {
      char CNP[14];
      char nume[30];
      int an;
      int grupa;
      int nrDiscipline;
      char note[20];
} STUDENT;

void main() {
    FILE*f;
    char numef[20];
    STUDENT s;
    printf("Nume fisier:"); gets(numef);
    f = fopen(numef, "rb");
    if (!f)
        printf("eroare");
    else {
        FILE*g;
        fopen_s(&g,"stud.txt", "w");
        fread(&s, sizeof(STUDENT), 1, f);
        while (!feof(f)) {
            fprintf( g,"%s %s %d %d %d ", s.CNP, s.nume, s.an, s.grupa, s.nrDiscipline);
            for (int i = 0; i < s.nrDiscipline; i++)
            {
                fprintf(g, "%s", s.note[i]);   
            }

            fread(&s, sizeof(STUDENT), 1, f);
        }
        fclose(g); fclose(f);

    }

}

Сначала я создал двоичный файл, который прошел хорошо, но затем я открываю текстовый файл, и массив неверен, он содержит некоторые случайные числа, возможно, некоторые адреса.Я попробовал все, но это не работает.

1 Ответ

1 голос
/ 12 марта 2019

Заменить

   fread(&s, sizeof(STUDENT), 1, f);
   while (!feof(f)) {
       ...
       fread(&s, sizeof(STUDENT), 1, f);
   }

от

    while (fread(&s, sizeof(STUDENT), 1, f) == sizeof(STUDENT)) {
        ...
    }

это имеет несколько преимуществ:

  • , как уже упоминалось в примечании, которое позволяет вам определить конец файла, в отличие от feof ( Почему «while (! Feof (file))» всегда неверно? )
  • вы обнаружите, поврежден ли ваш файл (слишком короткий)
  • Вы пишете только один раз при звонке на Фред в своем коде

Возможно, измените fprintf(g, "%s", s.note[i]); на fprintf(g, "%s ", s.note[i]);, чтобы отделить примечания, и, за исключением случаев, когда вы действительно хотите написать очень длинную строку, добавьте fputc('\n', g); в конце , тогда как

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...