[C] Determinare dimensione di un file con fscanf

di Anonimizzato14341 il
6 risposte
Salve a tutti. Sto seguendo un corso di Sistemi Operativi e stiamo iniziando a conoscere il C.
Ora il professore ha detto di leggere un file e di determinarne la dimensione in bytes senza utilizzare fseek e ftell, ma sfruttando fscanf prima e poi fare lo stesso usando fread.
Sto facendo il primo caso (quello con fscanf) ed ho scritto il seguente codice:

#include <stdio.h>
#include <string.h>

void main(int argc, char *argv[]){
FILE *fp;
char *k;

fp=fopen(argv[1],"r");
if(fp){
	fscanf(fp,"%s",k);
	printf("\nVariabile k: %i\n\n",k);
	}
else printf("\nNon sono riuscito ad aprire il file!\n\n");

fclose(fp);
return;
}
solo che come output continua a non darmi nulla (mi da k=null). Dove sto sbagliando?? Cosa posso fare??

p.s. colgo l'occasione per presentarmi. Sono uno studente magistrale di Ingegneria Informatica e spero di divertirmi a parlare di programmazione in questo forum!

6 Risposte

  • Se vuoi leggere un char dal file

    1) il char deve esistere
    2) passerai il puntatore al char alla fscanf con il tipo %c

    Quindi

    char k;

    fscanf(fp,"%c",&k);

    ma così leggi correttamente solo un carattere non tutti i caratteri del file ... ti ci vuole un ciclo ...
  • Ed il ciclo come posso impostarlo??? o meglio qual'è la condizione per uscire da un eventuale while???
  • Che ne pensi di leggere il file carattere per carattere finché non raggiungi l'EOF(End Of File)?
  • Ho fatto così:
    	while(fgetc(fp)!=EOF){
    		fscanf(fp,"%c",&k);
    		printf("\nVariabile k: %c\n\n",&k);
    		num++;
    		}
    	printf("\nIl numero di elementi letti è: %i\n\n",num);	
    	}
    ma in un file di 22 elementi mi restituisce num=11.

    Dove sbaglio?
  • Se usi la fgetc per leggere il carattere non devi usare la fscanf altrimenti leggi 2 caratteri a giro ...
  • Perfetto grazie ho risolto! ho usato nel while la fscanf!
Devi accedere o registrarti per scrivere nel forum
6 risposte