Buonasera,
devo scrivere un programma che legga e visualizzi il contenuto di un file ASCII, come per esempio eutoexec.bat.
Non ho problemi con la fgets, ho qualche problema con la fread, e ho tanti problemi con la scanf. Vado a copiare il codice e a commentarlo.
Il programma con fgets (soluzione non completamente mia) funziona bene:
{//INIZIO PROGRAMMA
char buffer[81];
FILE *fp;
fp=fopen("autoexec.txt", "r");
if(fp==NULL) printf("Impossibile aprire file\n");
else{//INIZIO ELSE PRINCIPALE
printf("\nIl file autoexec.bat contiene: ");
while(fgets(buffer, 80, fp) !=NULL)
printf(buffer);
}//FINE ELSE PRINCIPALE
fclose(fp);
}//FINE PROGRAMMA
Il programma con fread non legge perfettamente. Non si blocca ma vengono stampati a monitor caratteri strani. Mi viene in mente quello che mi avete detto in un'altra occasione, ma vorrei conferma.
main()
{
char buffer[81];
int n;
FILE *fp;
fp=fopen("autoexec.txt", "r");
if(fp==NULL) printf("Impossibile aprire file\n");
else{//INIZIO ELSE PRINCIPALE
printf("\nIl file autoexec.bat contiene: ");
while(n=(fread(buffer,1,81,fp)))
printf(buffer);
}//FINE ELSE PRINCIPALE
fclose(fp);
}//FINE PROGRAMMA
Il programma con fscan è un disastro totale: non solo il ciclo for è fuoriluogo (ma con il while tutte le condizioni di uscita non funzionavano), ma non capisco la sintassi fscanf(fp, "%c", buffer); Io mi sarei aspettato fscanf(fp, "%s", buffer); o al massimo utilizzando una variabile char Variabile; mi sarei aspettato fscanf(fp, "%c", &Variabile); ma niente di tutto questo funziona.
main()
{
char buffer[81];
int i;
FILE *fp;
fp=fopen("autoexec.txt", "r");
if(fp==NULL) printf("Impossibile aprire file\n");
else{//INIZIO ELSE PRINCIPALE
printf("\nIl file autoexec.bat contiene: ");
for(i=0; i<1000; i++){
fscanf(fp, "%c", buffer); //////////////////////////////////////////////
printf(buffer);
}
}//FINE ELSE PRINCIPALE
fclose(fp);
Ho provato con eutoexec.bat e eutoexec.txt (giusto per provare) dove all'interno ho scritto con notepad dieci frasi per un totale di 700 caratteri circa.
Spero di essere stato chiaro.
Grazie.