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);
}
}