Чтение и распечатка .dat файлов в C - PullRequest
0 голосов
/ 06 апреля 2020

История в том, что у меня есть две программы. Первый просит пользователей ввести контактные данные (имя, телефон, адрес электронной почты) ряда людей и сохранить их в 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);


} 
...