Newsgroup: it.comp.lang.c
Titolo: AIUTO RUBRICA

Salve a tutti, ho dei problemi in questo listato:
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct{
 char nome[10];
 char cognome[10];
 int tel;
 int cel;
 int contr;
}Rubrica;
void main(){
 Rubrica p;
 p.cel=0;
 int scelta,g,t,f,n,j,scelta1,test=0;
 char ricerca[10];
 FILE *fp;
 while(scelta!=0){
  printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  printf("\t\t\tRUBRICA TELEFONICA");
  printf("\n\n\n\t\t\t1. IMMISSIONE");
  printf("\n\n\t\t\t2. LETTURA");
  printf("\n\n\t\t\t3. RICERCA");
  printf("\n\n\t\t\t4. CANCELLAZIONE");
  printf("\n\n\t\t\t0. FINE");
  printf("\n\n\n\t\t\t\tInserire la scelta: ");
  scanf("%d",&scelta);
  printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  switch(scelta){
  case 1: file://IMMISSIONE
   fp=fopen("Rubrica.dat","a+");//APRE IL FILE
   do{
    printf("INSERIMENTO NOMINATIVI\n\n");
    printf("Nome: ");
    gets(p.nome);
    gets(p.nome);
    printf("Cognome: ");
    gets(p.cognome);
    printf("Telefono: ");
    scanf("%d",&
p.tel
);
    printf("Cellulare: ");
    scanf("%d",&p.cel);
    p.contr=0;//SERVE PER LA CANCELLAZIONE
    fwrite(&p,sizeof(p),1,fp);//MEMORIZZA IL FILE
    printf("\nVuoi inserire un altro nominativo? SI=1 NO=0: ");
    scanf("%d",&scelta1);
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
    printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
   }while(scelta1!=0);
   fclose(fp);//CHIUDE IL FILE
   break;
  case 2: file://LETTURA
   fp=fopen("Rubrica.dat","r+b");
   if(fp==NULL)//CONTROLLO SE IL FILE ESISTE
    printf("\nLa rubrica e' vuota!!\n");
   else{
    fseek(fp,0,0);//PONE L'INDICE ALL'INIZIO
    t=f=0;
    printf("\nLETTURA RUBRICA\n\n\n");
    printf("_________________________________________________\n");
    printf("|N.|   NOME   | COGNOME  | TELEFONO | CELLULARE |\n");
    printf("|--+----------+----------+----------+-----------+");
    for(;;){
     t++;
     fseek(fp,0,SEEK_CUR);
     n=fread(&p,sizeof(p),1,fp);
     if(n==0){
      fclose(fp);//CHIUDE FP
      break;//FERMA IL FOR
     }
     else{
      file://STAMPA SINGOLO RECORD COMPRESI NEL FILE
      file://SE TEST-> SE P.CONTR=1 NON FA LEGGERE
      file://I RECORD CHE SONO ELIMINATI
      if(p.contr==0){
       printf("\n|%2d|%10s|%10s|%10d|%11d|",f,p.nome,p.cognome,
p.tel
,p.cel);
       printf("\n|--+----------+----------+----------+-----------|");
       f=f+1;
      }
     }
    }
   }
   printf("\n");
   getch();
   break;
  case 3: file://RICERCA
   printf("RICERCA\n\n\n");
   fp=fopen("Rubrica.dat","r+b");
   printf("Inserire il cognome da ricercare: ");
   gets(ricerca);
   gets(ricerca);
   getch();
   j=f=0;
   printf("\nLETTURA RUBRICA\n\n\n");
   printf("_________________________________________________\n");
   printf("|N.|   NOME   | COGNOME  | TELEFONO | CELLULARE |\n");
   printf("|--+----------+----------+----------+-----------+");
   do{
    n=fread(&p,sizeof(p),1,fp);
    if(fp==NULL)
     printf("\nLa rubrica e' vuota!!\n\n");
    f=f+1;
    if(n==0){
     strcmp(ricerca,"*A*");
     printf("\n\nLETTURA ARCHIVIO TERMINATA\n\n");
    }
    file://CONFRONTA SE RICERCACOGNOME E' UGUALE A P.COGNOME
    file://SE E' VERO TEST=0
    test=strcmp(p.cognome,ricerca);
    file://SOLO SE P.COGNOME=0 PASSA LA LETTURA DEL DATO
    file://AL CONTRARIO SIGNIFICA CANCELLATO
    if(p.contr==0){
     if(test==0){
      j=j+1;//VUOL DIRE CHE IL FILE E' STATO CREATO
      printf("\n|%2d|%10s|%10s|%10d|%11d|",f,p.nome,p.cognome,
p.tel
,p.cel);
      printf("\n|--+----------+----------+----------+-----------|");
     }
    }
   }while(n!=0);
   fclose(fp);
   if(j==0)
    printf("\nNon esiste nessun contatto con questo nome!!\n\n");
   getch();
   break;
  case 4://CANCELLAZIONE
   fp=fopen("Rubrica.dat","r+b");
   printf("Inserire il nome del record da ricercare: ");
   gets(ricerca);
   gets(ricerca);
   getch();
   g=j=f=0;
   do{
    n=fread(&p,sizeof(p),1,fp);
    f=f+1;
    if(n==0){
     strcpy(ricerca,"*A*");
     printf("\n\nLETTURA ARCHIVIO TERMINATA");
    }
    g=g+1;
    file://CONFRONTA SE 'RICERCA' č UGUALE A 'P.COGNOME'
    file://SE E' VERO TEST=0
    test=strcmp(p.cognome,ricerca);
    file://SE P.CONTROLLO=0 LEGGE IL DATO ALTRIMENTI LO SALTA
    file://VUOL DIRE CHE E' CANCELLATO
    if(p.contr==0){
     if(test==0){
      j=j+1;//VUOL DIRE CHE IL FILE E' STATO TROVATO
      printf("\nLETTURA RUBRICA\n\n\n");
      printf("\n_________________________________________________");
      printf("\n|N.|   NOME   | COGNOME  | TELEFONO | CELLULARE |");
      printf("\n|--+----------+----------+----------+-----------+");
      printf("\n|%2d|%10s|%10s|%10d|%11d|",f,p.nome,p.cognome,
p.tel
,p.cel);
      printf("\n|--+----------+----------+----------+-----------|\n\n");
      printf("\nSi vuole eliminare il record visualizzato? SI=1 NO=0: ");
      scanf("%d",&scelta);
      if(scelta==1){
       file://P.CONTROLLO PRENDE IL VALORE SEGUENTE
       p.contr=1;
       file://VIRTUALMENTE VIENE CAMBIATO IL VALORE
       file://DEL RECORD IN MODO CHE NON VIENE PIU'
       file://RICINOSCIUTO
       fseek(fp,(g-1)*sizeof(p),SEEK_SET);
       fwrite(&p,sizeof(p),1,fp);
       file://RESETTA L'ARCHIVIO E RITORNA A CONTROLLARE
       file://DALL'INIZIO
       fseek(fp,0,0);
       g=0;
       printf("\nIl record e' stato eliminato!!\n");
      }//IF
      else
       printf("\nIl record non e' stato eliminato!!");
     }//IF
    }//IF
   }while(n!=0);//DO
   fclose(fp);
   file://SE IL NOME NON E' PRESENTE IN ARCHIVIO
   if(j==0)
    printf("\n\n======>Non esiste nessun record con questo nome!!");
   gets(ricerca);
   getch();
   break;
   }
   }
   }
Perchč quando inserisco il numero di cellulare mi da dei numeri sballati? ho
azzerato anche la variabile p.cell=0;
Perchč quando decido di non eliminare il nomivativo e premo lo 0 (zero) il
programma si termina invece di andare al menů principale?
GRAZIE

 ha scritto nel messaggio
news:9Zgy8.25621$8D3.6...@news1.tin.it...
