gio84
08-03-2005, 18:55
Come ho spiegato nel precedente post (c++ & EOF) quando tendo di modificare un file di struct alcune registrazioni vengono sovrapposte da dei duplicati.
Secondo me il problema principale è il (fread(&rut,sizeof(rut),1, stream)>0). Poi quando compilo esce anche questo warning per il segno "-" d'avanti sizeof:
"warning C4146: unary minus operator applied to unsigned type, result still unsigned"
ora vi posto l'intero codice:
FILE *stream = fopen("text.txt","r+");
printf("Inserisci il Cogome ");
gets(cogn);
printf("Inserisci il Nome ");
gets(nom);
while ((fread(&rut,sizeof(rut),1, stream)>0) && (tr==false))
{
if ((strcmp(rut.cognome,cogn)==0) && (strcmp(rut.nome,nom)==0)) ì
{
tr=true;
cout<<endl;
cout<<endl;
cout<<"Cognome "<<rut.cognome<<" ";
cout<<"Nome "<<rut.nome<<" ";
cout<<"Telefono "<<rut.num<<" ";
cout<<"Cellulare"<<rut.cell<<" ";
cout<<"Via/Piazza "<<rut.indirizzo.indiri;
cout<<" num "<<rut.indirizzo.n<<endl;
printf("Vuoi modificare questa Id? s/n");
gets(x);
if(x[0]=='s') {
cout<<"Cosa vuoi modificare?"<<endl;
cout<<"(1)Cognome,(2)Nome,(3)Telefono,(4)Cellulare,(5)Indirizzo,(6)civico,(0)Esci"<<endl;
cin>>h;
switch (h)
{
case 1:
{
printf("Inserisci Cognome ");
gets(rut.cognome);
break;
}
case 2:
{
printf("Inserisci Nome ");
gets(rut.nome);
break;
}
case 3:
{
printf("Inserisci Numero ");
gets(rut.num);
break;
}
case 5:
{
printf("Inserisci Indirizzo");
gets(rut.indirizzo.indiri);
break;
}
case 6:
{
printf("Inserisci civico");
gets(rut.indirizzo.n);
break;
}
case 4:
{
printf("Inserisci Cellulare");
gets(rut.cell);
break;
}
default:
if(h<0 || h>6)
{
cout<<endl;
cout<<"Inserisci un valore compreso tra 0 e 6"<<endl;
cout<<endl;
}
}
fseek(stream,-sizeof(rut),SEEK_CUR);
fwrite(&rut,sizeof(rut),1,stream);
}//chiude il secondo if che individua l'id
}//chiude il primo if che verifica se si vuole modificare o meno l'id
}//chiude il while
fflush(stream);
fclose(stream);
}
Secondo me il problema principale è il (fread(&rut,sizeof(rut),1, stream)>0). Poi quando compilo esce anche questo warning per il segno "-" d'avanti sizeof:
"warning C4146: unary minus operator applied to unsigned type, result still unsigned"
ora vi posto l'intero codice:
FILE *stream = fopen("text.txt","r+");
printf("Inserisci il Cogome ");
gets(cogn);
printf("Inserisci il Nome ");
gets(nom);
while ((fread(&rut,sizeof(rut),1, stream)>0) && (tr==false))
{
if ((strcmp(rut.cognome,cogn)==0) && (strcmp(rut.nome,nom)==0)) ì
{
tr=true;
cout<<endl;
cout<<endl;
cout<<"Cognome "<<rut.cognome<<" ";
cout<<"Nome "<<rut.nome<<" ";
cout<<"Telefono "<<rut.num<<" ";
cout<<"Cellulare"<<rut.cell<<" ";
cout<<"Via/Piazza "<<rut.indirizzo.indiri;
cout<<" num "<<rut.indirizzo.n<<endl;
printf("Vuoi modificare questa Id? s/n");
gets(x);
if(x[0]=='s') {
cout<<"Cosa vuoi modificare?"<<endl;
cout<<"(1)Cognome,(2)Nome,(3)Telefono,(4)Cellulare,(5)Indirizzo,(6)civico,(0)Esci"<<endl;
cin>>h;
switch (h)
{
case 1:
{
printf("Inserisci Cognome ");
gets(rut.cognome);
break;
}
case 2:
{
printf("Inserisci Nome ");
gets(rut.nome);
break;
}
case 3:
{
printf("Inserisci Numero ");
gets(rut.num);
break;
}
case 5:
{
printf("Inserisci Indirizzo");
gets(rut.indirizzo.indiri);
break;
}
case 6:
{
printf("Inserisci civico");
gets(rut.indirizzo.n);
break;
}
case 4:
{
printf("Inserisci Cellulare");
gets(rut.cell);
break;
}
default:
if(h<0 || h>6)
{
cout<<endl;
cout<<"Inserisci un valore compreso tra 0 e 6"<<endl;
cout<<endl;
}
}
fseek(stream,-sizeof(rut),SEEK_CUR);
fwrite(&rut,sizeof(rut),1,stream);
}//chiude il secondo if che individua l'id
}//chiude il primo if che verifica se si vuole modificare o meno l'id
}//chiude il while
fflush(stream);
fclose(stream);
}