#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
//Questa risoluzione mi sembra un po’ pesante e ripetitiva perĂ² non mi sono venuti in mente altri modi
//provate un po’ e fatemi sapere…
int main(int argc, char*argv[])
{
const int MAX=100;
FILE*f;
FILE*fe;
FILE*fu;
float ammontare, totaleentrate=0.0,totaleuscite=0.0;
char riga[MAX+1];
char tipotransazione;
char motivo[51];
int data;
int volte=0;
f=fopen(argv[1],”r”);
if(f==NULL)
{
printf(“impossibile aprire il file %s\n”, argv[1]);
exit(1);
}
while(fgets(riga,MAX,f)!=NULL)
{
volte++;
if(volte==1)
sscanf(riga,”%d”, &data);
else
{
sscanf(riga,”%c %f %s”, &tipotransazione, &ammontare, &motivo);
if(toupper(tipotransazione)==’E')
{
fe=fopen(“entrate.dat”,”a”);
if(fe==NULL)
{
printf(“impossibile aprire entrate.dat\n”);
exit(1);
}
fprintf(fe,”%d %.2f %s\n”, data, ammontare, motivo);
fclose(fe);
}
else if(toupper(tipotransazione)==’U')
{
fu=fopen(“uscite.dat”,”a”);
if(fu==NULL)
{
printf(“impossibile aprire uscite.dat\n”);
exit(1);
}
fprintf(fu,”%d %.2f %s\n”, data, ammontare, motivo);
fclose(fu);
}
}
}
fe=fopen(“entrate.dat”,”r”);
if(fe==NULL)
{
printf(“impossibile aprire entrate.dat\n”);
exit(1);
}
while(fgets(riga,MAX,fe)!=NULL)
{
sscanf(riga,”%d %f %s”, &data, &ammontare, &motivo);
totaleentrate=totaleentrate+ammontare;
}
fclose(fe);
fu=fopen(“uscite.dat”,”r”);
if(fu==NULL)
{
printf(“impossibile aprire entrate.dat\n”);
exit(1);
}
while(fgets(riga,MAX,fu)!=NULL)
{
sscanf(riga,”%d %f %s”, &data, &ammontare, &motivo);
totaleuscite=totaleuscite+ammontare;
}
fclose(fu);
printf(“files aggiornati correttamente\n\nsaldo complessivo pari a %.2f Euri\n”, totaleentrate-totaleuscite);
exit(0);
}
