#include <stdio.h>
float LeggiRapporto(FILE* fp)
{
float val;
int denominatore;
char ch;
fscanf(fp,"%f",&val);
ch = fgetc(fp);
if (ch == %)
return val/100;
else if (ch == /)
{
fscanf(fp,"%d",&denominatore);
return val/denominatore;
}
else /* ch e \n (oppure un blank spurio alla fine della riga) */
return val;
}
char* MassimoRapporto(char* nome_file)
{
char nome_nazione[21], nome_nazione_massimo[21];
char* nome_restituito;
float rapporto, rapporto_massimo = 0;
FILE* fp;
fp = fopen(nome_file,"r");
while(fscanf(fp,"%s",nome_nazione) != EOF)
{
rapporto = LeggiRapporto(fp);
if (rapporto > rapporto_massimo)
{
strcpy(nome_nazione_massimo,nome_nazione);
rapporto_massimo = rapporto;
}
64 Soluzioni degli esercizi sui file
}
fclose(fp);
nome_restituito = (char*) malloc(strlen(nome_nazione_massimo) + 1);
strcpy(nome_restituito,nome_nazione_massimo);
return nome_restituito;
}
main()
{ /* programma principale */
printf("Il massimo rapporto e quello di %s\n",
MassimoRapporto("rapporti.txt"));
}
Deficit e PIL
Programma in C che lavora con i file, dato il seguente file che contiene il rapporto tra deficit e PIL (prodotto interno lordo) per una lista di nazioni europee, ogni riga del file contiene il nome della nazione (massimo 20 caratteri) ed il rapporto Deficit e PIL.
Il rapporto sarà:
- Un valore reale assoluto
- Una frazione tra interi, cioè due interi separati dal carattere /
- Un valore reale percentuale seguito dal carattere %
Il file deve essere strutturato così:
Germania 3.0%
Francia 54/2000
Irlanda 67/1500
Italia 0.027
Olanda 2.2%
Il programma prenderà dal file il rapporto più alto e stamperà la nazione con tale rapporto.