Ah ok
allora metto il codice qui...
attendo dei giudizi!! e sopratutto dei consigli su cosa approfondire i miei studi...
#include <stdio.h>
#include <string.h>
struct dati { //STRUTTURA DATI RUBRICA
char nome[20];
char cognome[20];
char telefono[12];
};
void insert (struct dati array[], FILE *f); //FUNZIONE INSERIMENTO
void insert (struct dati array[], FILE *f){
char contatto[60];
long l;
printf("Inserisci nome e cognome "); //inserimento dati
scanf("%s",&array[0].nome);
scanf("%s",&array[0].cognome);
printf("Inserisci il telefono ");
scanf("%s",&array[0].telefono);
strcat(contatto,array->nome); //unisco le stringhe in un unico array
strcat(contatto," "); //mettendo uno spazio tra nome
strcat(contatto,array->cognome); //cognome
strcat(contatto," "); //e telefono
strcat(contatto,array->telefono); //poi vado a capo, così il file di testo riporta
strcat(contatto,"\n"); //una riga per ogni nome
l=strlen(contatto); //controllo lunghezza della stringa con i dati
printf("%s",contatto); //la stampo per controllo
fwrite(contatto,sizeof(char),l,f); //copio la stringa sul file rubrica.txt
printf("Contatto inserito\n");
strcpy(contatto,""); //cancello la stringa temporanea
}
int delete (FILE *f); //FUNZIONE ELIMINA
int delete (FILE *f){
char contatti [256][60];
int i,c,j;
i=0;
c=0;
while((fgets(contatti[i], 60, f))!=NULL) { //leggo dal file i contatti (finchè ne trovo) e li
printf("%d) %s",i+1,contatti[i]); //copio in una matrice di 256 posizioni da 60 celle
i++;
} //conservo i come contatore ultima posizione
printf("\nNumero contatto da cancellare? "); //scelgo il numero relativo al contatto da eliminare
scanf("%d",&c); //lo assegno a c e poi copio nella posizione c-1
strcpy(contatti[c-1],"?\n"); //un carattere qualsiasi di confronto
fclose(f); //chiudo il file perchè lo devo riaprire
//in scrittura w+ (sovrascrive tutto)
if ((f = fopen( "/Users/toti/Library/Developer/Xcode/files/rubrica.txt", "w+" )) == NULL ){
return 1; //controllo che la riapertura in w+ sia avvenuta
}
for (j=0;j<i;j++){ //in un ciclo da 0 a i controllo quale riga
if (strcmp(contatti[j],"?\n")!=0){ //della matrice è diversa dal carattere di confronto
fwrite(contatti[j],sizeof(char),strlen(contatti[j]),f);//e in quel caso la copio sul file riaperto
}
}
fclose(f); //chiudo il file perchè lo riaprirò in a+
if ((f = fopen( "/Users/toti/Library/Developer/Xcode/files/rubrica.txt", "a+" )) == NULL ){
return 1; //controllo che la riapertura in a+ sia avvenuta
} //verrà poi chiuso nel main al termine
return 0; //del programma
}
int modify (FILE *f, struct dati array[]); //FUNZIONE MODIFICA
int modify (FILE *f, struct dati array[]){
char contatti [256][60];
char contatto [60];
int i,c,j;
i=0;
c=0;
while((fgets(contatti[i], 60, f))!=NULL) { //leggo dal file i contatti (finchè ne trovo) e li
printf("%d) %s",i+1,contatti[i]); //copio in una matrice di 256 posizioni da 60 celle
i++;
} //conservo i come contatore ultima posizione
printf("\nNumero contatto da modificare? "); //scelgo il numero relativo al contatto da eliminare
scanf("%d",&c); //lo assegno a c e poi copio nella posizione c-1
strcpy(contatti[c-1]," "); //uno spazio per cancellare tutto il contenuto
printf("\nRiscrivi nome e cognome ");
scanf("%s",&array[0].nome); //reinserisco i dati da modificare
scanf("%s",&array[0].cognome);
printf("Inserisci il telefono ");
scanf("%s",&array[0].telefono);
strcat(contatto,array->nome); //unisco le stringhe in un unico array
strcat(contatto," "); //mettendo uno spazio tra nome
strcat(contatto,array->cognome); //cognome
strcat(contatto," "); //e telefono
strcat(contatto,array->telefono); //poi vado a capo, così il file di testo riporta
strcat(contatto,"\n");
strcpy(contatti[c-1],contatto); //copio nella matrice il contatto aggiornato
fclose(f); //chiudo e riapro in riscrittura (w+)
if ((f = fopen( "/Users/toti/Library/Developer/Xcode/files/rubrica.txt", "w+" )) == NULL ){
return 1; //controllo che la riapertura in w+ sia avvenuta
}
for (j=0;j<i;j++){
fwrite(contatti[j],sizeof(char),strlen(contatti[j]),f); //copio tutta la matrice sul file rubrica.txt
}
printf("Contatto modificato\n");
strcpy(contatto,""); //cancello contenuto del array temporaneo
return 0;
}
void print (FILE *f); //FUNZIONE STAMPA
void print (FILE *f){
char contatti [60]; //array temporaneo
int i;
i=0;
while((fgets(contatti, 60, f))!=NULL) { //leggo dal file i contatti (finchè ne trovo) e li
printf("%d) %s",i+1,contatti); //copio nell'array temporaneo e stampo
i++;
}
printf("\n");
}
int main (void) //PROGRAMMA RUBRICA
{
FILE *f;
int scelta;
struct dati elenco[2];
if ((f = fopen( "/Users/toti/Library/Developer/Xcode/files/rubrica.txt", "a+" )) == NULL ){
return 1;
}
printf("RUBRICA TELEFONICA\n");
while (scelta!=5){
printf("\nMenù:\n1)Inserisci Contatto\n2)Elimina Contatto\n3)Modifica Contatto\n4)Stampa Rubrica\n5)Esci\n");
printf("Scelta: ");
scanf("%d",&scelta);
if (scelta==1){
insert(elenco,f);
fseek(f,1,SEEK_END);
}
if (scelta==2){
rewind(f);
delete(f);
}
if (scelta==3){
rewind(f);
modify(f,elenco);
}
if (scelta==4){
rewind(f);
print(f);
}
if (scelta==5){
printf("Chiusura programma in corso...");
fclose(f);
printf("\nTerminato");
}
}
}