Я пытаюсь создать программу, которая может сохранять записи / заметки, которые можно писать и читать с помощью программы. Но мне было интересно, почему файлы .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?