Problema Scorrimento File in C

di il
4 risposte

Problema Scorrimento File in C

Salve sto cercando si svolgere un esercizio da uno dei libri dei fratelli Deitel, il compito è di confrontare l'account di un cliente in due File, uno è il file principale chiamato "oldmast.dat" dove ci sono salvati il numero dell'account del cliente il nome e l'ammontare del debito. Mentre l'altro è il file delle transizioni chiamato "trans.dat", dove c'è sempre il numero dell'account del cliente e l'ammontare della transizione. Ora, se non ho capito male, dovrei andare a sommare i due valori float e stampare il tutto su un nuovo File chiamato "newmast.dat". Il problema è che non riesco a scorrere i File per continuare i confronti.

il codice è questo, spero possiate aiutarmi. Grazie in anticipo.
#include <stdio.h>

int main(){
	
	int accOne, accTwo;
	char name[ 30 ];
	float balOne, balTwo;
	
	FILE *oldPtr,*trPtr,*newPtr;
	
	if( ( oldPtr = fopen( "oldmast.dat", "r" ) ) && ( trPtr = fopen( "trans.dat", "r" ) ) && ( newPtr = fopen( "newmast.dat", "w" ) ) == NULL ){
		
		printf( "File could not opened\n" );
	}
	else{
		
			do{
				
				fscanf( oldPtr, "%d%s", &accOne, name );
				
				do{
				
					fscanf( trPtr, "%d", &accTwo );
					
					if( accOne == accTwo ){
						
						fscanf( oldPtr, "%f", &balOne );
						fscanf( trPtr, "%f", &balTwo );
						printf( "%d %s %.2f\n", accOne, name, balOne + balTwo );
						fprintf( newPtr, "%d %s %.2f\n", accOne, name, balOne + balTwo );
					}
								
				}while( !feof( trPtr ) );
				
				rewind( trPtr );
				
			}while( !feof( oldPtr ) );
				
		fclose( oldPtr );
		fclose( trPtr );
		fclose( newPtr );
	}
	
	return 0;
	
}

4 Risposte

  • Re: Problema Scorrimento File in C

    Premesso che non conosco questo libro.. perchè hai utilizzato fprintf() e fscanf()? I files devono essere files di testo?
    Se lavori con files binari (fwrite() ed fread()) forse ti semplifichi la vita...
  • Re: Problema Scorrimento File in C

    Perché nel libro mi richiede di leggere e scrivere un File ad accesso sequenziale, mentre fread e fwrite vengono usati nel libro per i file ad accesso casuale, insieme alla funzione fseek per il posizionamento dell'offset dei byte del file. Ora premetto che l'argomento lo sto studiando da poco (quello dei file intendo) e non so se fread e fwrite si possano usare anche con i file ad accesso sequenziale.
  • Re: Problema Scorrimento File in C

    Come ti avevo premesso, non conosco il libro (o i libri di Deitel). Se ti viene proposto un esercizio di questa complessità vuol dire che ti è stato proposto (ed eventualmente anche risolto) in precedenza un esercizio di complessità inferiore.
    Suppongo pertanto che dovresti già aver fatto un programma di questo tipo: salvare una serie di valori float su file e (magari con un altro programma) rileggere tali valori.
    Se non lo hai fatto ti suggerisco di farlo
    Se usi fwrite() puoi lavorare ad accesso sequenziale e poi fread() sempre in modo sequenziale ti permette di rileggere i valori.
    Se invece usi fprintf() ed fscanf() hai il grande problema che i tuoi float vengono convertiti in testo nel file e quindi quando vai a rileggere avrai il tuo bel da fare.
    Ora, indipendentemente dalla tua scelta: sembra che non riesci ad affrontare questo problema, per cui prova a risolverne uno più semplice, come l'esempio che ti ho descritto sopra.
    Buono studio
  • Re: Problema Scorrimento File in C

    Problema risolto. L'errore stava nel fatto che il file veniva scritto in maniera errata e perciò non me lo faceva scorrere. Riscrivendolo nella maniera corretta ho risolto il problema. Adesso il mio programma di File-Matching funziona benissimo. Ringrazio Candaluar per avermi consigliato di partire dalle basi e poi arrivare a procedure più articolate. Grazie.
Devi accedere o registrarti per scrivere nel forum
4 risposte