/* Nome: Mario Cognome: Montanari Classe: 3IAN Data: 09/04/2025 es22. (scrivitab) Scrivere un programma che legga da tastiera e memorizzi in un'apposita struttura dati la seguente tabella: +-----------------+-----------------+-------------+-------------+ | Cognome | Nome | Altezza (m) | Peso (kg) | +-----------------+-----------------+-------------+-------------+ | Rossi | Mario | 1.75 | 76 | | Ferraro | Carlo | 1.84 | 82 | | Marelli | Chiara | 1.65 | 58 | +-----------------+-----------------+-------------+-------------+ Terminato il caricamento, il programma deve memorizzare l'intera tabella nel file di testo tabella.txt (un record per linea, campi separati con un tabulatore; non deve essere memorizzata la riga d'intestazione). Si ipotizzi che tutti i campi testuali siano privi di spazi, che le altezze siano numeri float e i pesi numeri interi. NOTA BENE: usare la funzione strncpy() */ #include #define SIZE 100+1 #define SIZE_LINE 1000+1 using namespace std; typedef struct { char nome[SIZE]; char cognome[SIZE]; float altezza; int peso; } anagrafe; void apriFile(const char * nomeFileSorgente, const char * nomeFileDestinazione); int main(void) { apriFile("tabella.txt", "testo.txt"); return 0; } void apriFile(const char * nomeFileSorgente, const char * nomeFileDestinazione) { FILE * fr = fopen(nomeFileSorgente, "rt"); if (fr != NULL) { FILE * fw = fopen(nomeFileDestinazione, "wt"); if (fw != NULL) { char riga[SIZE_LINE]; anagrafe caratteristica; for (int i = 0; i < 3; i++) { fgets(riga, sizeof(riga), fr); } while (fscanf(fr, "| %16s | %16s | %f | %d | %*[\n]", caratteristica.cognome, caratteristica.nome, &caratteristica.altezza, &caratteristica.peso ) == 4) { fprintf(fw, "%s\t%s\t%.2f\t%d\n", caratteristica.cognome, caratteristica.nome, caratteristica.altezza, caratteristica.peso ); } fclose(fw); } else { perror("Error (destination)"); } fclose(fr); } else { perror("Error (source)"); } }