Ho fatto come dici tu, adesso ti mostro l'intero codice perchè si presentano ancora due problemi:
codice:
#include <stdio.h>
#include <stdlib.h>
#define DIMN 20
#define DIMT 15
#define DIMD 8
#define DIMC 15
typedef struct{
char n[DIMN];//nominativo
char t[DIMT];//telefono
char d[DIMD];//data nascita
char c[DIMC];//comune nascita
}Contatto;
/*
Nome: aggiungi
Descrizione: aggiunge un contatto alla rubrica
Input: il puntatore al file binario, gli elementi presenti in rubrica
Output: il nuovo numero di elementi presenti in rubrica
*/
int aggiungi(FILE *fp, int n){
Contatto contatto;
fflush(stdin);
printf("Inserisci cognome e nome: ");
gets(contatto.n); //per acquisire anche lo spazio tra nome e cognome
printf("Inserisci numero telefonico: ");
scanf("%s",contatto.t);
printf("Inserisci data di nascita (gg/mm/aa): ");
scanf("%s",contatto.d);
printf("Inserisci comune: ");
scanf("%s",contatto.c);
fseek(fp,0,SEEK_END);
fwrite(&contatto,1,sizeof(contatto),fp);
printf("\n\n");
return;
}
/*
Nome: stampa_tutto
Descrizione: stampa la rubrica
Input: il puntatore al file binario, gli elementi presenti in rubrica
Output: nessuno
*/
void stampa_tutto(FILE *fp, int n){
Contatto contatto;
int i;
printf("%-20s%-15s%-15s%-20s\n\n","Nominativo","Telefono","Data Nascita","Luogo Nascita");
for(i=0;i<n;i++){
fseek(fp,((i)*(sizeof(contatto))),SEEK_SET);
fread(&contatto,1,sizeof(contatto),fp);
//printf("%s",contatto.d);
printf("%-15s %-15s %-8s %-15s\n",contatto.n,contatto.t,contatto.d,contatto.c);
}
printf("\n");
return;
}
int main(){
FILE *fp;
int x,n=-1;
Contatto contatto;
fp=fopen("Rubrica.dat","rb+");
if(fp == NULL){
fp=fopen("Rubrica.dat","wb");
fclose(fp);
}
fp=fopen("Rubrica.dat","rb+");
while(feof(fp)==0){ //conto quanti sono i contatti già salvati
fread(&contatto,1,sizeof(contatto),fp);
n++;
}
printf("In rubrica ci sono %d contatti\n\n",n);
do{
printf("(1) Aggiungi\n(2) Stampa rubrica\n(0) Esci\n");
printf("--> ");
scanf("%d",&x);
switch(x){
case 1: n=aggiungi(fp,n);
break;
case 2: stampa_tutto(fp,n);
break;
}
}while(x > 0);
fclose(fp);
system("PAUSE");
return 0;
}
Tralasciando il problema della formattazione del testo ecco quello che succede: