データを読み込んで保存したいプログラムがあります。理想的には、データを読み取り、データを表示して変更し、必要に応じて別のファイルに保存できるようにしたいと考えています。現在、データを読み取ることができる場所にありますが、変更を加えたり、コンテンツを別のファイルに保存したりすることはできません。かなり長いので、コード全体を投稿することは避けますが、ここに私の構造、メイン関数、メニュー関数、および読み取り関数を示します。
typedef struct friends_contact{
char *First_Name;
char *Last_Name;
char *home;
char *cell;
}fr;
int main() {
fr friends[5];
char buffer[BUFFSIZE];
int counter=0;
int i=0;
menu(friends, &counter,i,buffer);
getch();
return 0;
}
//Menu function
void menu(fr*friends,int* counter, int i,char buffer[]) {
int user_entry=0;
int user_entry1=0;
int user_entry2=0;
char user_entry3[50]={'\0'};
FILE *read;
printf("Welcome! Would you like to import a file? (1)Yes or (2) No");
scanf("%d",&user_entry1);
if(user_entry1==1)
{
printf("Please enter a file name");
scanf("%s",user_entry3);
read=fopen(user_entry3,"r");
}else;
do{
int result;
printf("\nPhone Book Application\n");
printf("1) Add friend\n2) Delete friend\n3) Show a friend\n4) Show phonebook\n5)Exit\n");
scanf("%d", &user_entry);
if(user_entry==1)
{
add_contact(friends,counter,i,buffer);
}
if(user_entry==2)
{
delete_contact(friends ,counter,i);
}
if(user_entry==3)
{
result=show_contact(friends ,counter,i);
if(result==0)
{
printf("\nName not Found\n");
}else
result;
}
if(user_entry==4)
{
print_contact(friends, counter,i,user_entry3);
if(user_entry1==1){
file2(friends ,counter,i,buffer,read);
}else;
}
}while(user_entry!=5);
if(user_entry==5)
{
fclose(read);
printf("Would you like to save entries to a file? (1)yes or (2) no");
scanf("%d",&user_entry2);
if(user_entry2 == 1)
{
printf("Please name your file");
scanf("%s",user_entry3);
file(friends, counter,i,user_entry3);
printf("Goodbye!");
}else if(user_entry2 == 2)
{
printf("Goodbye!");
}
}
}
私の読み取り機能:
char file2(fr*friends ,int* counter, int i,char buffer[],FILE*read){
fseek(read, 0, SEEK_SET);
while (fscanf(read, "%s", buffer) != EOF)
{
friends[i].First_Name=malloc(BUFFSIZE*strlen(buffer));
strcpy(friends[i].First_Name, buffer);
printf("%s\n",friends[i].First_Name);
}
}
先ほど言ったように、現在、ファイルの内容を表示することはできますが、編集したり、別のファイルに出力したりすることはできません。私のコードにはおそらく完璧ではないものもありますが、他の変更を行うことを心配する前に、これに集中しようとしています(プログラムは言及された問題の外で動作するため)。大きな緑色のチェックマークを出す準備ができました! :)