PDA

View Full Version : [C] Primo programma da solo


piumone
27-06-2007, 17:05
Ci ho provato. Ma ci sono degli errori anche in compilazione che non riesco a correggere. Sapreste aiutarmi per favore?

I file dati1.txt e dati2.txt contengono uno per riga dei numeri decimali. Scrivere il programma C che legge i numeri dai due file e produce un terzo file (dati3.txt) che contiene la somma dei due valori letti. I file dat1.txt e dati2.txt non hanno la stessa lunghezza. Quando uno dei due file è terminato sul file dati3.txt sono ricopiati i valori del file non ancora terminato.

Esempio

3.60 -3.00 0.60
-78.904 7.0 -71.904
23.0 23.0
-17.3 -17.3
dati1.txt dati2.txt dati3.txt

#include <stdio.h>
#include <stdlib.h>
double somma (double a, double b)
{
double s;
s=a+b;
return s;
}
int main ()
{

FILE *fo, *fi, *fe;
double a,b;
fo=fopen("dati1.txt","r");
fi=fopen ("dati2.txt","r");
fe=fopen ("dati3.txt","w");
if (fo==NULL||fi==NULL)
exit(-1);
while (fscanf(fo,"%lf",&a)&&(fscanf(fi,"%lf",&b))!=EOF
{

ris=somma(a,b);
fprintf(fe,"%f%",ris);
}
fclose(fo);fclose(fi);fclose(fe);
return 0;
}

wingman87
27-06-2007, 23:55
Se non lo fai già impara a indentare il codice, diventa molto più leggibile, in ogni caso quando posti codice sul forum usa il tag CODE.
#include <stdio.h>
#include <stdlib.h>

int main(){
FILE *fo, *fi, *fe;
double a,b,ris; //Avevi dimenticato di dichiarare ris

fo=fopen("dati1.txt","r");
fi=fopen ("dati2.txt","r");
fe=fopen ("dati3.txt","w");
if (fo==NULL||fi==NULL)
exit(-1);

while (fscanf(fo,"%lf",&a)&&(fscanf(fi,"%lf",&b))!=EOF){//Qui mancava una parentesi chiusa
ris=a+b; //Ho tolto la funzione somma
fprintf(fe,"%lf%\n",ris);
a=0;b=0; //Quando uno dei 2 file termina resta memorizzato l'ultimo valore letto,
//in questo modo mi assicuro che non resti memorizzato nulla
}

fclose(fo);fclose(fi);fclose(fe);
return 0;
}

piumone
28-06-2007, 08:52
Ok Perfetto Grazie mille.. Mi eserciterò meglio in questi giorni spero di arrivare all'esame preparato.. Alla prossima..