C - Modificare campo record su file

di il
22 risposte

22 Risposte - Pagina 2

  • Re: C - Modificare campo record su file

    Non va anche con il tuo pezzo di codice. Comunque il codice modificato era:
    
    void segnala_pagato(newtype vet){
         int id;
         visualizzazione_totale(vet);
         printf("\n\nInserisci l'id del prodotto da segnalare come pagato:");
         scanf("%d",&id);
         
         fp=fopen("file","r+");
         
         while((fread(&vet,sizeof(vet),1,fp))>0){
                                                 if(id==vet.id){
                                                                if(vet.pagato==1){
                                                                                  printf("Prodotto gia' pagato!!");
                                                                                  break;
                                                                                  }else{
                                                                                  vet.pagato=1;
                                                                                  fseek(fp, ftell(fp)-sizeof(vet), SEEK_SET);
                                                                                  fwrite(&vet,sizeof(vet),1,fp);
                                                                                  
                                                                                  break;
                                                                                  }
                                                                                  }
                                                                                  
                                                                                  }
                                                                                  
                                                                                  
    fclose(fp);
    getch();
    }                                                                                   
    
  • Re: C - Modificare campo record su file

    Manca solo da scoprire la definizione della tua struttura. Così si possono fare tutte le prove.
  • Re: C - Modificare campo record su file

    Quindi? come hai dichiarato sta struttura? O bisogna andare a tentativi? Visto che non riesci a creare un applicativo minimo che riproduce il problema significa che me lo devo creare io ma se non mi dici com'è sta struttura brancolo nel buio.
  • Re: C - Modificare campo record su file

    Ecco a te un esempio funzionante
    
    #include <stdio.h>
    
    struct newtype
    {
    	int id;
    	int pagato;
    };
    
    int main()
    {
    	struct newtype vet;
    	FILE *fp = NULL;
    	int id = -1;
    	
    	int i = 0;
    	struct newtype strutture[10];
    
    	if((fp = fopen("magazzino.dat","r")) != NULL)
    		fclose(fp);
    	//inserimento a caso di strutture con campo non pagato
    	else
    	{
    		for(i = 0; i < 10; i++)
    		{
    			strutture[i].pagato = 2;
    		}
    
    		fp = fopen("magazzino.dat","wb+");
    		if(fp != NULL)
    		{
    			for(i = 0; i < 10; i++)
    			{
    				strutture[i].id = i;
    				fwrite(&strutture[i],sizeof(struct newtype),1,fp);
    			}
    			fclose(fp);
    		}
    	}
    	
    	// fine inserimento da usare una sola volta solo per creare il file
    	
    
    	printf("inserisci un id: ");
    	scanf("%d", &id);
    
    	fp=fopen("magazzino.dat","rb+");
    
    	if(fp != NULL)
    	{
    		while((fread(&vet,sizeof(struct newtype),1,fp))>0)
    		{
    			if(id == vet.id)
    			{
    				if(vet.pagato==1)
    				{
    					printf("Prodotto gia' pagato!!");
    					break;
    				}
    				else
    				{
    					vet.pagato=1;
    					fseek(fp, ftell(fp)- sizeof(struct newtype), SEEK_SET);
    					fwrite(&vet,sizeof(struct newtype),1,fp);
    					break;
    				}
    			}
    
    		}
    		fclose(fp);
    	}
    
    	return 0;
    }
    
    Quindi il problema sta nel tuo codice.
  • Re: C - Modificare campo record su file

    http://www.cplusplus.com/reference/clibrary/cstdio/fseek/
    http://www.cplusplus.com/reference/clibrary/cstdio/ftell/

    Se leggi la struct per la sua dimensione é giusto riposizionare indietro della stessa misura prima della scrittura.
  • Re: C - Modificare campo record su file

    Eccola:
    
    struct record{
           int id;
           int tipo;
           char divisa[30];
           char giocatore[30];
           int num;
           char patch[50];
           float prezzo;
           char acquirente[50];
           int pagato;
           int ordinato;
           int cancellato;
    };
    
    typedef record newtype;
    
    FILE *fp;
    
  • Re: C - Modificare campo record su file

    Cambia la struct nel mio programmino sopra e vedi se funziona. Secondo me si. Ti ricordo di nuovo: devi aprire il file in binary mode, non in text mode.
  • Re: C - Modificare campo record su file

    Ok funziona grazie 1000
Devi accedere o registrarti per scrivere nel forum
22 risposte