ファイルから電話帳プログラムに情報を読み込んで連絡先リストから表示しようとすると、最初に表示しようとするとリストが空白になりますが、もう一度確認すると、ファイルの内容が表示されます。 。さらに奇妙なことに、プログラムを介して名前を追加すると、その名前はファイルデータと一緒に一度表示されますが、もう一度確認すると、新しい名前は消えてしまいます。名前を削除すると一度削除されますが、連絡先リストをもう一度確認すると名前が戻ってきます。私は途方に暮れています。これが私の読み取り機能と私の印刷機能です。
void file2(fr*friends ,int* counter, int i,char buffer[],FILE*read,char user_entry3[])
{
int len;
fr temp;
*counter=0;
i=0;
fseek(read, 0, SEEK_SET);
while (fgets(buffer, 80, read) != NULL) {
temp.First_Name=malloc(36); //was j+1
temp.Last_Name=malloc(36); //strlen(buffer));
sscanf(buffer,"%s %s",temp.First_Name,temp.Last_Name);
fgets(buffer, 20, read);
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.home=malloc(20); //len);
strcpy(temp.home, buffer);
fgets(buffer, 20, read);
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.cell=malloc(20); //len);
strcpy(temp.cell, buffer);
friends[i].First_Name=malloc(MAXNAME);
friends[i].Last_Name=malloc(MAXNAME);
friends[i].home=malloc(MAXPHONE);
friends[i].cell=malloc(MAXPHONE);
if(!friends[i].First_Name || !friends[i].Last_Name || !friends[i].home || !friends[i].cell) {
printf("\nmalloc() failed!\n");
getchar();
return;
}
strcpy(friends[*counter].First_Name,temp.First_Name);
strcpy(friends[*counter].Last_Name,temp.Last_Name);
strcpy(friends[*counter].home,temp.home);
strcpy(friends[*counter].cell,temp.cell);
(*counter)++;
i++;
}
//fclose(read);
free(temp.Last_Name);
free(temp.First_Name);
free(temp.home);
free(temp.cell);
}
void print_contact(fr*friends ,int* counter, int i,char buffer[],char user_entry3[50],FILE*read) {
for( i = 0; i < *counter; i++)
if (strlen(friends[i].First_Name) && strlen(friends[i].Last_Name)&& strlen(friends[i].home)&& strlen(friends[i].cell ))
{
getFirst(friends, i);
getLast(friends, i);
getHome(friends, i);
getCell(friends, i);
}
file2(friends ,counter,i,buffer,read,user_entry3);
}
プログラムが一度は完全に機能するが、その後は完全に機能しないように見えるので、それは奇妙です。