Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] loop infinito

    Ciao a tutti!
    Ho un problema e non riesco a capire il motivo.. quando lo eseguo mi entra in loop, e non esce mai perchè non entra mai in questa condizione:
    codice:
    else
    		{
    		
    			fineDecompressione=1; //ho raggiunto la fine del file e ponendo fineDecompressione a 1 esco dal while
    		}
    premetto che alla funzione decomprimi passo un file di n caratteri composto da una successione di numeri (se il numero è 0 lo associo a 256), alternata a caratteri..

    Prima del while (fineDecompressione==0) ovviamente apro il file *nomeDelFile in modalità lettura binaria e un altro file in modalità scrittura..

    Il problema dovrebbe consistere nel fatto che non trova l'EOF e quindi fineDecompressione non diviene mai uguale a 1 e non esce dal while, entrando così in loop!

    LUNGHEZZA_BUFFER_LETTURA è 1000

    Riuscite ad aiutarmi? grazie mille per la disponibilità!

    codice:
    void decomprimi(unsigned char *nomeDelFile)
    {
    
    ...
    	
    	while(fineDecompressione==0)
    	{				//fino alla fine del file 	
    		
    		numeroByte=fread(bufferLettura,1,LUNGHEZZA_BUFFER_LETTURA,fileBinario);	//
    		printf("\n numeroByte:%d \n",numeroByte);
    		
    		
    		
    			rewind(fileBinario);	
    		if(!feof(fileBinario))					//se non è la fine del file (End Of File)
    		{	
    			
    	
    			while(k<numeroByte)
    			{
    				
    				numero=bufferLettura[k];
    				lettera=bufferLettura[k+1];
    				printf("\n Numero: %d \n",numero);
    				printf("\n Lettera: %c \n",lettera);
    				
    				if(numero==0)
    				{	
    					numero=256;
    				}
    				
    				if(lettera==64)
    				{
    					lettera=' ';
    				}
    				
    				bufferScrittura=(unsigned char*)malloc((numero+1)*sizeof(char));		//allocazione della memoria per bufferScrittura
    				
    				for(j=0;j<numero;j++)
    				{
    					bufferScrittura[j]=lettera;
    				}
    					
    				bufferScrittura[j]='\0';	//metto il \0 per andare a scrivere sul file
    			
    				printf("\n BufferScrittura: %s \n",bufferScrittura);
    				
    				fileScritto=fwrite(bufferScrittura,1,(numero+1),fileTesto);	//scrivo sul file
    				
    				free(bufferScrittura);				
    				numero=0;
    				lettera='\0';
    				
    				k+=2;
    			}
    			
    		}
    		else
    		{
    		
    			fineDecompressione=1; //ho raggiunto la fine del file e ponendo fineDecompressione a 1 esco dal while
    		}
    
    	}
    	
    
    	
    		printf("\nFine della decompressione!\n");
    		fflush(stdout);
    		
    		//chiusura dei file aperti
    		fclose(fileBinario);
    		fclose(fileTesto);
    		
    }

  2. #2
    Non ho capito come fa ad arrivare alla fine del file se ogni volta prima del controllo, fai il rewind del cursore di lettura:

    codice:
    	while(fineDecompressione==0)
    	{				//fino alla fine del file 	
    		
    		numeroByte=fread(bufferLettura,1,LUNGHEZZA_BUFFER_LETTURA,fileBinario);	//
    		printf("\n numeroByte:%d \n",numeroByte);
    		
    		
    		
    			rewind(fileBinario);	
    		if(!feof(fileBinario))					//se non è la fine del file (End Of File)
    		{
    Entra nel ciclo, leggi 100 byte e poi fai tornare il cursore all'inizio con rewind. Fai tutte le operazioni e poi quando fa l'iterazione successiva leggi gli stessi 1000 byte e resetti il cursore. Così leggi sempre gli stessi 1000 byte all'infinito.
    lolide
    Java Programmer

    Informati

  3. #3
    grazie mille!!! era un errore del cavolo ma non riuscivo proprio a vederlo!

  4. #4
    Ora purtroppo mi si presenta un altro problema.. mi scrive il file, ma ogni volta che trova una lettera diversa dalla precedente mi inserisce uno spazio tra le due.. E' una cosa che fa la fwrite, cioè che ogni volta che scrive inserisce uno spazio oppure c'è un errore nel codice che non ho notato??

  5. #5
    IL PROBLEMA PRECEDENTE L'HO RISOLTO!
    ma mi è sorto un nuovo problema purtroppo.. con tipi di file molto grandi, ad esempio di 250 MB, nella decompressione il bufferLettura non carica tutti i caratteri del file compresso ed esce, decomprimendo in modo sbagliato.. anche modificando la dimensione di LUNGHEZZA_BUFFER_LETTURA non riesco a risolverlo in quanto esce comunque prima di averlo letto tutto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.