Aiuto con l'apertura di un file

di il
9 risposte

Aiuto con l'apertura di un file

Sto cercando di creare un programmino che legga i numeri scritti in un file *.txt poi li visualizzi sullo schermo, il file è nella stessa directory del codice e del programma ma quando lo faccio partire ottengo questo errore:
Last login: Wed May 26 18:46:47 on console
/Users/filopelor92/Documents/apri\ documento/build/Debug/apri\ documento ; exit;
macbook-di-filippo-savi:~ filopelor92$ /Users/filopelor92/Documents/apri\ documento/build/Debug/apri\ documento ; exit;
File coudn't be opened,Program will exitThe numbers are:
logout
ed il codice sorgente è:
#include <stdio.h>
#include <stdlib.h>

int main() {
FILE *file;
int numbers[3000];
int i=0,j;

file = fopen("numeri.dat", "r+");

if (file != NULL) {

printf("File opened successfully.\n");

}

else {

printf("File coudn't be opened,Program will exit");


}

while(i>0) {
fscanf(file, "%d", &numbers);
i++;
}

printf("The numbers are:\n");

for(j=0 ; j<i ; j++) {
printf("%d\n", numbers[j]);
}

fclose(file);
return 0;
}


vi prego aiutatemi

9 Risposte

  • Re: Aiuto con l'apertura di un file

    Hai provato con:
    
    file = fopen("./numeri.dat", "r+");
    
    ?
  • Re: Aiuto con l'apertura di un file

    Ho cambiato il codice in:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    	FILE *file;
    	int numbers[3000]; 
    	int i=0,j;
    	
    	[color=#40FF00]file = fopen("/Users/filopelor92/Documents/apri documento/numeri.txt", "r");[/color]
    	if (file != NULL) {
    		
    		               printf("File opened successfully.\n");
    		
    	                  }
    	
     				 else {
    					 
    					   printf("File coudn't be opened,Program will exit");
    					    
    					 
    					  }
    	
    	while(i>0) { 
    		fscanf(file, "%d", &numbers[i]);
    		i++;
    	}
    	
    	printf("The numbers are:\n");
    	
    	for(j=0 ; j<i ; j++) {
    		printf("%d\n", numbers[j]);
    	}
    	 
           fclose(file);
    
    	[color=#40FF00]if ( file == NULL ) {
    		printf("file chiuso con successo");
    	                     }[/color]
             fclose(file);
    	return 0;
    }
    in primo luogo ho specificato il percorso completo del file poi ho cambiato il modo di apertura in lettura semplice dato che a me serve solo quello poi ho aggiunto la seconda stringa di codice per sapere si il file fosse chiuso correttamente. cio che ho ricevuto come output è stato questo:
    Last login: Wed May 26 20:10:42 on ttys001
    /Users/filopelor92/Documents/apri\ documento/build/Debug/apri\ documento ; exit;
    macbook-di-filippo-savi:~ filopelor92$ /Users/filopelor92/Documents/apri\ documento/build/Debug/apri\ documento ; exit;
    File opened successfully.
    The numbers are:
    logout
  • Re: Aiuto con l'apertura di un file

    Quindi adesso il file riesci ad aprirlo. (Probabilmente bastava solo il ./ davanti al nome per farlo).

    Stai attento al while: la condizione è sempre falsa e non leggerà mai da file. Però se fosse vera andresti in loop infinito visto che continui a incrementare i e verificare che sia sempre > 0. Inoltre non verifichi mai se hai raggiunto la fine del file.
    
    while (!feof(file) && i < 3000) {
        fscanf(file, "%d", &numbers[i]);
    }
    
    Edit:
    fclose() non setta a NULL la variabile file, ma restituisce 0 se chiude il file o EOF se fallisce. Quindi devi modificare anche quell'if.
  • Re: Aiuto con l'apertura di un file

    Ok ora che il codice è così (ho aggiunto un i++; nel ciclo while)
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    	FILE *file;
    	int numbers[3000]; 
    	int i=0,j;
    	
    	file = fopen("/Users/filopelor92/Documents/apri documento/numeri.txt", "r");
    	
    	if (file != NULL) {
    		
    		               printf("File opened successfully.\n");
    		
    	                  }
    	
     				 else {
    					 
    					   printf("File coudn't be opened,Program will exit");
    					    
    					 
    					  }
    	
    	while (!feof(file) && i < 3000) {
    		fscanf(file, "%d", &numbers[i]);
    		i++;
    	}
    	
    	printf("The numbers are:\n");
    	
    	for(j=0 ; j<i ; j++) {
    		printf("%d\n", numbers[j]);
    	}
    	fclose(file);
    	
    	if ( fclose(file) == 0 ) {
    		printf("file chiuso con successo");
    	                     }
    	return 0;
    }
    	
    mi ritornano un sacco di numeroni strani che non ci sono nel file dato che il suo contenuto è questo:
    93 93 93
    93 93 93
  • Re: Aiuto con l'apertura di un file

    filopelor92 ha scritto:


    (ho aggiunto un i++; nel ciclo while)
    Sorry: me lo ero dimenticato io.

    feof() verifica che il file sia finito solo dopo la lettura di fscanf(), quindi i viene incrementato di una posizione. Il range dell'array stampabile va da 0 a ( i - 1).
     
    	while (!feof(file) && i < 3000) {
    		fscanf(file, "%d", &numbers[i]);
    		i++;
    	}
    	
    	printf("The numbers are:\n");
    	
    	for(j=0 ; j < ( i - 1 ); j++)  { // parentesi per evidenziare.
    		printf("%d\n", numbers[j]);
    	}
    
  • Re: Aiuto con l'apertura di un file

    Purtroppo i numeracci strani rimangono quindi penso il problema non fosse questo;
    ed io essendo come avrete capito un principiante non so dove sbattere la testa
  • Re: Aiuto con l'apertura di un file

    Il codice (con le correzioni indicate) funziona, quindi presumo che il problema sia nel file.
    Comunque dire "numeracci" non significa nulla se non posti un pò dell'output.
  • Re: Aiuto con l'apertura di un file

    Purtoppo non posso allegare il file questo è il contenuto copiato ed incollato
    93 93 93
    93 93 93

    e una parte di numeri
    File opened successfully.
    The numbers are:
    6852240
    0
    5904
    0
    4096
    32
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    1606407056
    32767
    1536
    1
    1606405920
    32767
    1606407056
    32767
    0
    0
    1606404608
    32767
    1606439487
    32767
    0
    0
    -1856350466
    1627360855
    0
    0
    1606407056
    32767
    1606405920
    32767
    1536
    1
    1536
    1
    0
    0
    1606405744
    32767
    1606441374
    32767
    1606405920
    32767
    1606407056
    32767
    1536

    questi sono solo una parte (postarli tutti avrebbe intasato il forum) pero la cosa va avanti così con molti zeri
  • Re: Aiuto con l'apertura di un file

    Il problema era nel file si grazie a tutti
Devi accedere o registrarti per scrivere nel forum
9 risposte