История в том, что у меня есть две программы. Первый просит пользователей ввести контактные данные (имя, телефон, адрес электронной почты) ряда людей и сохранить их в phonebook.dat (этот код работает)
#include <stdio.h>
enum {SUCCESS, FAIL, MAX_ELEMENT = 40};
// the phone book structure
typedef struct phoneaddress_t {
char name[20];
char tel[11];
char email[30];
}phoneaddress;
int main(void)
{
FILE *fp;
phoneaddress phonearr[MAX_ELEMENT];
int i,n, irc; // return code
int reval = SUCCESS;
printf("How many contacts do you want to enter (<20)?");
scanf("%d", &n);
for (i=0; i<n; i++){
printf("name:"); scanf("%s",phonearr[i].name);
printf("tel:"); scanf("%s",phonearr[i].tel);
printf("email:"); scanf("%s",phonearr[i].email);
}
if ((fp = fopen("phonebook.dat","w+b")) == NULL){
printf("Can not open %s.\n", "phonebook.dat");
reval = FAIL;
}
// write the entire array into the file
irc = fwrite(phonearr, sizeof(phoneaddress), n, fp);
printf(" fwrite return code = %d\n", irc);
fclose(fp);
//read from this file to array again
if ((fp = fopen("phonebook.dat","rb")) == NULL){
printf("Can not open %s.\n", "phonebook.dat");
reval = FAIL;
}
irc = fread(phonearr, sizeof(phoneaddress), n, fp);
printf(" fread return code = %d\n", irc);
for (i=0; i<n; i++){
printf("%s\t\t",phonearr[i].name);
printf("%s\t\t",phonearr[i].tel);
printf("%s\n",phonearr[i].email);
}
fclose(fp);
return reval;
}
А вторая программа спрашивает пользователей, сколько контакты, которые они хотели бы извлечь (которые будут храниться в phone1.dat), а остальные будут храниться в phone2.dat. Проблема в том, что я не знаю, как сделать так, чтобы «остальные» сохранялись в phone2.dat.
Также кто-нибудь показывает мне, как распечатать phone1 и phone2.dat на экране? Я очень новичок в этом, пожалуйста :(
Моя вторая программа
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct phoneaddress_t {
char data[MAX];
}phoneaddress;
int main()
{
phoneaddress phonedat;
FILE *f1 = fopen ("phonebook.dat", "r+b");
FILE *f2 = fopen ("phone1.dat", "w+b");
FILE *f3 = fopen ("phone2.dat", "w+b");
char *ptr;
int irc, size;
printf("How many addresses do you want to extract? Enter: ");
scanf("%d", &size);
if (f1 == NULL)
{
printf ("Cant open original phonebook.dat\n");
return 1;
}
else if (f2 == NULL)
{
printf ("Cant open file phone1.dat\n");
return 1;
}
else if (f2 == NULL)
{
printf ("Cant open file phone1.dat\n");
return 1;
} else {
ptr = (phoneaddress*) malloc (size * sizeof(phoneaddress));
if (ptr == NULL)
{
printf ("Memory allocation failed!\n");
return 1;
}
}
fread (ptr, sizeof(phoneaddress), size, f1);
fwrite (ptr, sizeof(phoneaddress), size, f2);
printf("%s", ptr);
fclose(f2);
//fread (ptr, sizeof(phoneaddress), size, f1);
//fwrite (ptr, sizeof(phoneaddress), size, f3);
}