School-Coding-Cpp/sfusi/es4_file.cpp

76 lines
1.7 KiB
C++

/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 21/03/2025
Aprire il file struct.txt con il blocco note, realizzare
una funzione per ciascuna delle seguenti richieste:
- leggere struct.txt e caricare i valori in un array di struct;
- calcolare il rapporto fra il campo reddito e il campo età.
Realizzare un main che utilizza le funzioni.
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#define SIZE 100
using namespace std;
typedef struct {
char nome[SIZE];
int eta;
int reddito;
char citta[SIZE];
} elementi;
void leggiFileCaratterePerCarattere(const char *nomeFile) {
FILE *fp = fopen(nomeFile, "rt");
if (fp != NULL) {
elementi line;
while (fscanf(fp, "%s %d %d %s", line.nome, &line.eta, &line.reddito, line.citta) == 4) { // Serve '&' quando usiamo int, float, double, char (se è un singolo carattere), etc. in una scanf
cout << line.nome << " "
<< line.eta << " "
<< line.reddito << " "
<< line.citta << endl;
}
fclose(fp);
} else {
perror("Error (source)");
}
}
void rapportoRedditoEta(const char *nomeFile) {
FILE *fp = fopen(nomeFile, "rt");
if (fp != NULL) {
elementi line;
float rapporto;
cout << "Rapporti reddito/eta': " << endl;
while (fscanf(fp, "%s %d %d %s", line.nome, &line.eta, &line.reddito, line.citta) == 4) { // Serve '&' quando usiamo int, float, double, char (se è un singolo carattere), etc. in una scanf
rapporto = (float)line.reddito / line.eta;
cout << " " << line.nome << ": " << rapporto << endl;
}
fclose(fp);
} else {
perror("Error (source)");
}
}
int main(void) {
leggiFileCaratterePerCarattere("struct.txt");
cout << endl;
rapportoRedditoEta("struct.txt");
return 0;
}