Modifica_file su file binario

di il
1 risposte

Modifica_file su file binario

Salve a tutti, apro questo topic per segnalarvi un errore riscontrato durante l'esecuzione di questo blocco di codice;
la richiesta del problema è la seguente: "Completa questo codice in linguaggio C in modo che la funzione modifica_file modifichi il contenuto di un file binario come specificato nel commento."
Per esattezza ciò che fallisce è la verifica con un file in presenza del piatto.
Sapreste aiutarmi?
Posto il codice qui sotto in attesa di possibili chiarimenti; Grazie.
#include <stdio.h>  /* ora puoi usare NULL */
#include <string.h>  /* ora puoi usare le funzioni sulle stringhe */

/* scrivi qui la definizione del tipo "stringa" (un array di 30 caratteri) */

typedef char stringa[30];

/* scrivi qui la definizione del tipo "piatto" che è un record con un campo nome (di tipo stringa) e un campo prezzo (di tipo intero). Questo tipo ti servira' per accedere ai dati di un file binario */

typedef struct {
stringa nome;
int prezzo;
} piatto;

/* INIZIO FUNZIONE */

void modifica_file(stringa n, int p, stringa nomefile){
    
    /* Si consideri un file binario contenete informazioni riguardo i piatti proposti dal menu' di un ristorante. Ogni record del file ha due campi:  nome (stringa) e prezzo (intero). Scrivi qui il codice che dato un nome n, un prezzo p, e il nome di un file binario, aggiorni con p il prezzo del piatto con nome n presente nel file binario. Nel caso in cui tale piatto non esista, bisogna aggiungere alla fine del file un nuovo piatto con nome n e prezzo p. Bisogna prevedere anche il caso in cui non esista un file binario con il nome passato in input. In questo caso la funzione non deve fare nulla.*/

FILE* f;
int prezzo;
stringa nome;
long posizione;
int fine = 0;
piatto a;
f = fopen(nomefile, "rb+");
if ( f != NULL ) {
    while ((!fine) && (!feof(f))) {
      posizione = ftell(f);
      fread(&a,sizeof(piatto), 1, f);
      if(!strcmp(n,nome)) {
        fseek(f, posizione, SEEK_SET);  
        a.prezzo = p;
        fwrite(&a, sizeof(piatto), 1, f);
        fine = 1;
      }
    }
    if (fine == 0) {
      strcpy(a.nome,n);
      a.prezzo=p;
      fwrite(&a, sizeof(piatto), 1, f);
    }
    fclose(f);   
  }
}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte