[SOLUZIONE]
Era una incompatibilità fra "char str[100];" che usavo per copiare i dati nelle stringhe tipo "string idprod;" risolto tutto sostituendo le string con char*"
[/SOLUZIONE]
(potete cancellare/chiudere se volete, scusate il disturbo!)
Salve ragazzi
non riesco a risolvere questo problema! In pratica quando avvio il main e creo il file per la prima volta attraverso questo codice
con il quale imposto l'header iniziale a 0...il programma funziona alla perfezione. Cioè posso fare vari inserimenti e varie visualizzazioni senza incorrere in errori.codice:FILE *fprod; fprod=fopen("prodotti.dat","rb"); if (fprod==NULL) { cout<<"Impossibile aprire il file. Creazione in corso..."<<endl; fprod=fopen("prodotti.dat","wb"); int header=0; fwrite(&header,sizeof(header),1,fprod); fclose(fprod); }
Quando chiudo il main, ed avvio nuovamente le sessioni di inserimento prodotti nel file (a prima vista sembra...) non dare errori, ma quando richiamo la visualizzazione crasha il programma...
I miei dubbi sono che ci sia qualche errore di scrittura o di apertura e quando procedo con la riapertura c'è uno sfasamento di campi che mi porta a questo errore.
Grazie in anticipo per ogni chiarimento!
Codice inserimento:
Codice visualizza:codice:void prodotti::insprod(){ FILE *fprod; prodotti *prod; char str[100]; double pu; int header,g; fprod=fopen("prodotti.dat","rb"); fseek(fprod,-4,SEEK_END); fread(&header,sizeof(header),1,fprod); rewind(fprod); printf("L'header e': %d\n",header); prod=new prodotti[header+1]; fread(prod,sizeof(prodotti)*header,1,fprod); fclose(fprod); puts("Inserisci l'ID del prodotto: "); cin.sync(); cin.getline(str,100); str[5]='\0'; prod[header].setidprod(str); puts("Inserisci il nome prodotto: "); cin.sync(); cin.getline(str,100); prod[header].setnome(str); puts("Inserisci il prezzo unitario: "); fflush(stdin); cin>>pu; cout<<"Il prezzo unitario inserito e': "<<pu<<endl; prod[header].setpunit(pu); puts("Inserisci la giacenza complessiva: "); fflush(stdin); cin>>g; prod[header].setgiac(g); header++; fprod=fopen("prodotti.dat","wb"); fwrite(prod,sizeof(prodotti)*header,1,fprod); fwrite(&header,4,1,fprod); fclose(fprod); }
codice:void prodotti::visualprod(){ FILE *fprod; prodotti *prod; int header; fprod=fopen("prodotti.dat","rb"); fseek(fprod,-4,SEEK_END); fread(&header,4,1,fprod); rewind(fprod); printf("L'header e': %d\n",header); prod=new prodotti[header]; fread(prod,sizeof(prodotti)*header,1,fprod); for(int i=0;i<header;i++){ cout<<"=====PRODOTTO n°:"<<i+1<<"====================================="<<endl <<"ID PRODOTTO: "<<prod[i].getidprod()<<endl <<"NOME PRODOTTO: "<<prod[i].getnome()<<endl <<"PREZZO UNITARIO: "<<prod[i].getpunit()<<" Euro cad."<<endl <<"DISPONIBILITA': "<<prod[i].getgiac()<<" pezzo/i"<<endl <<"======================================================="<<endl<<endl; } fclose(fprod); system("pause"); }

) 
					
					
					
						
  Rispondi quotando