codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fusione (FILE *alfa, FILE *beta, FILE *gamma);
int main ()
{
int numA, numB;
char simbA[3], simbB[3];
float massaA, massaB;
int qntA, qntB;
FILE *pfile, *pfile2, *pfile3;
if ((pfile3= fopen("gamma.txt", "w")) == NULL)
printf (" ACQUISISCO FILE ALFA!\n\n");
if ((pfile= fopen("alfa.txt", "w")) == NULL)
printf ("\nIl file non puo' essere aparto\n");
else {
printf ("Inserisci il num atomico, simbolo, massa atomica \ne disponibilta' in magazzino.\n");
printf ("Inserisci EOF (ctrl + z) per terminare l'input\n\n");
printf ("- ");
scanf ("%d%s%f%d", &numA, simbA, &massaA, &qntA);
while (!feof(stdin)) {
fprintf (pfile, "%3d \t%3s\t %7.2f\t %6d\n", numA, simbA, massaA, qntA);
printf ("- ");
scanf ("%d%s%f%d", &numA, simbA, &massaA, &qntA);
}
fclose (pfile);
}
printf ("\n\n ACQUISISCO FILE BETA!\n\n");
if ((pfile2= fopen("beta.txt", "w")) == NULL)
printf ("\nIl file non puo' essere aparto\n");
else {
printf ("Inserisci il num atomico, simbolo, massa atomica \ne disponibilta' in magazzino.\n");
printf ("Inserisci EOF (ctrl + z) per terminare l'input\n");
printf ("\n- ");
scanf ("%d%s%f%d", &numB, simbB, &massaB, &qntB);
while (!feof(stdin)) {
fprintf (pfile2, "%3d \t%3s\t %7.2f\t %6d\n", numB, simbB, massaB, qntB);
printf ("- ");
scanf ("%d%s%f%d", &numB, simbB, &massaB, &qntB);
}
fclose (pfile2);
}
fusione (pfile, pfile2, pfile3);
system ("pause");
}
void fusione (FILE *alfa, FILE *beta, FILE *gamma)
{
int numA, numB;
char simbA[3], simbB[3];
float massaA, massaB;
int qntA, qntB;
int statoA, statoB;
if ((alfa = fopen ("alfa.txt", "r")) == NULL)
printf ("\n\n Il file alfa non puo' essere aperto \n");
else
if ((beta = fopen ("beta.txt", "r")) == NULL)
printf ("\n\n Il file beta non puo' essere aperto \n");
else {
//inizio secondo else
statoA = (fscanf (alfa, "&d%s%f%d", &numA, simbA, &massaA, &qntA));
statoB = (fscanf (beta, "%d%s%f%d", &numB, simbB, &massaB, &qntB));
while ((statoA != EOF) && (statoB != EOF))
{
if (numA == numB){
fprintf (gamma, "%3d \t%3s\t %7.2f\t %6d\n", numA, simbA, massaA, (qntA+qntB));
statoA = (fscanf (alfa, "%d%s%f%d", &numA, simbA, &massaA, &qntA));
statoB = (fscanf (beta, "%d%s%f%d", &numB, simbB, &massaB, &qntB));
}
else if (numA < numB){
fprintf (gamma, "%3d \t%3s\t %7.2f\t %6d\n", numA, simbA, massaA, qntA);
statoA = (fscanf (alfa, "%d%s%f%d", &numA, simbA, &massaA, &qntA));
}
else {
fprintf (gamma, "%3d \t%3s\t %7.2f\t %6d\n", numB, simbB, massaB, qntB);
statoB = (fscanf (beta, "%d%s%f%d", &numB, simbB, &massaB, &qntB));
}
}
if ((statoA != EOF) && (statoB == EOF))
//se solo beta è giunto a termine i dati di alga rimanenti vengono copiati in gamma
{
do {
fprintf (gamma, "%3d \t%3s\t %7.2f\t %6d\n", numA, simbA, massaA, qntA);
statoA = (fscanf (alfa, "%d%s%f%d", &numA, simbA, &massaA, &qntA));
}
while (statoA != EOF);
} //fine copia
if((statoA == EOF) && (statoB != EOF))
//se solo alfa è giunto a termine i dati di beta rimanenti vengono copiati in gamma
{
do {
fprintf (gamma, "%3d \t%3s\t %7.2f\t %6d\n", numB, simbB, massaB, qntB);
statoB= (fscanf(beta, "%d%f%f%d", &numB, simbB, &massaB, &qntB));
}
while (statoB != EOF);
} //fine copia
printf ("\n\n il file Gamma e' stato creato. \n");
} //fine del secondo else
}