PDA

Visualizza la versione completa : [C] fusione e somma (se uguali) di due file


managerfx
10-01-2012, 16:25
salve ragazzi, mi appello alla vostra bravura sperando di risolvere qualcosa!

qst programma dovrebbe creare 2 file rispettivo a 2 magazzini (alfa e beta) che contengano numero atomico, simbolo, peso e quantità disponibile in magazzino.

acquisiti i magazzini la funzione fusione dovrebbe fondere i 2 magazzini in un unico file gamma e in caso di elementi uguali deve sommare le quantità!

io ho provato a fare questo....funziona...ma quando si tratta di sommare non fa niente di niente!

mi dareste una mano!? grazie!






#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

}

managerfx
10-01-2012, 18:15
semplifico il tutto: come si fa creare un file "c.txt" che contenga la somma di un numero presente nel file "a.txt" e un altro numero presente nel file "b.txt" ????'

così come sotto mi restituisce sempre 0!!!!!







#include <stdio.h>
#include <stdlib.h>

int main ()
{
FILE *pfile1, *pfile2, *pfile3;
int num, num1;

pfile1= fopen ("a.txt", "w");
printf ("\nInserisci numero che verra' inserito nel file A: ");
scanf ("%d", &num);
fprintf (pfile1, "%d", num);

pfile2= fopen ("b.txt", "w");
printf ("\nInserisci numero che verra' inserito nel file B: ");
scanf ("%d", &num1);
fprintf (pfile2, "%d", num1);

fclose(pfile1);
fclose (pfile2);


num=0;
num1=0;


pfile3= fopen ("tot.txt", "w");
fscanf (pfile1, "%d", &num);
fscanf (pfile2, "%d", &num1);
fprintf (pfile3, "%d", (num1+num));



printf ("\n\n\n");
system ("pause");

}

ramy89
10-01-2012, 18:25
Ti sei dimenticato di aprire i file in lettura:


#include <stdio.h>
#include <stdlib.h>

int main ()
{
FILE *pfile1, *pfile2, *pfile3;
int num, num1;

pfile1= fopen ("a.txt", "w");
printf ("\nInserisci numero che verra' inserito nel file A: ");
scanf ("%d", &num);
fprintf (pfile1, "%d", num);

pfile2= fopen ("b.txt", "w");
printf ("\nInserisci numero che verra' inserito nel file B: ");
scanf ("%d", &num1);
fprintf (pfile2, "%d", num1);

fclose(pfile1);
fclose (pfile2);


num=0;
num1=0;

pfile1=fopen("a.txt","r"); // apri i file prima di leggeri
pfile2=fopen("b.txt","r");
pfile3= fopen ("tot.txt", "w");
fscanf (pfile1, "%d", &num);
fscanf (pfile2, "%d", &num1);
fprintf (pfile3, "%d", (num1+num));



printf ("\n\n\n");
system ("pause");

}

Loading