Почему fwrite не работает должным образом при использовании struct? - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь создать программу, которая может сохранять записи / заметки, которые можно писать и читать с помощью программы. Но мне было интересно, почему файлы .txt всегда перемешаны со странными символами.

struct record {
    char time[6];
    char name[30];
    char place[25];
    char note[500];
} ;

void addrecord() {
    system("cls");
    FILE *fp ;
    char another = 'Y';
    char time[10];
    struct record diary ;
    char filename[15];

    printf("\n\n\t\t***************************\n");
    printf("\t\t* MENU TO ADD A RECORD *");
    printf("\n\t\t***************************\n\n");
    printf("\n\n\tDATE OF RECORD:[yyyy-mm-dd]:");
    scanf("%s", filename);

    fp = fopen (filename, "a+" ) ;
    if ( fp == NULL ) {
        fp=fopen(filename,"w+");
        if(fp==NULL) {
            printf("\nPROGRAM ERROR!");
            printf("\nPRESS ANY KEY TO TRY AGAIN!");
            getch();
            return ;
        }
    }
    printf ( "\n\tTIME OF RECORD:[hh:mm]:");
    scanf("%s",time);
    while(fread(&diary,sizeof(diary),1,fp)==1) {
        if(strcmp(diary.time,time)==0) {
            printf("\n\tRECORD ALREADY EXISTS!.\n");
            return;
        }
    }
    strcpy(diary.time,time);

    printf("\tNAME:");
    scanf(" %[^\n]s ",diary.name);

    printf("\tPLACE:");
    scanf(" %[^\n]s ",diary.place);

    printf("\tNOTE:");
    scanf(" %[^\n]s ",diary.note);

    fwrite (&diary, sizeof(diary), 1, fp ) ;
    printf("\nRECORD HAS BEEN ADDED\n");

    fclose ( fp ) ;
    printf("\n\n\tPRESS ANY KEY TO EXIT...");
    getch();
}

Приведенный выше код является функцией для создания текстовых файлов. Если мой ввод:

filename: 2020-03-22

TIME: 22:08

NAME: BOB

PLACE: HOME

NOTE: THIS IS A TEST

Сгенерированный текстовый файл содержит следующее:

22:08 BOB uÊ ˆÊ ¸Ê þa ´]‡wÿa Home ÿa ÿa Úr@ ^      THIS IS A TEST d   ÿa 8ýa ´]‡w      w 2
d€  F„u       Ûr@  ÿ   €ç‡w   ¸Y€ *Ê ùé‡w               *Ê S 1     àOÊ  *Ê À Ê ¸  =    €           (þa ¸  &   0   èþa Ÿ‹w'R—eþÿÿÿHþa /°‡w         $þa       Ê ÐK€ ÿa        þa       àY€               <þa &¤}uÊ ÙŽ[§    F„u              þa    8þa ;©}uÊ xþa RÕ}u   BÕ}uŽ[§    F„u    $      Hþa $   èþa ÀÌ~u=â¹Ò F„u           *Ê ”þa õou4D„u þa oŠu   àþa ŽS€u     F„ukS€uŽ[§Ð@ Ð@        ´þa Ž[§Ìÿa ÀÌ~u­ê¹Òþÿÿÿø

Не уверен, что это то, что должно произойти ... help?

...