PDA

Visualizza la versione completa : [C] Conteggio dei caratteri in un file


spALT96
12-02-2012, 18:29
Ciao,

ho scritto un programma che deve contare dei caratteri in un file di testo (costitux.txt), ho cercato di usare la funzione fseek, ma purtroppo non mi esce dal ciclo.

qualcuno riesce a dirmi dove sbaglio?

Grazie mille



#include<stdio.h>
#define FNAME "costituz.txt"

int main () {
FILE * punt;
punt= fopen(FNAME, "r");
int i, nr;
char c;
i= 0;
nr= 0;
while (c!=EOF ) {
fseek(punt, i, SEEK_SET);
fscanf(punt, "%c", &c);
if ((c=='r') || (c=='R')) {
nr++;
}
i++;
}
printf("\nCi sono %d lettere nel file FNAME e %d lettere r", i, nr);
getchar();
fclose(punt);
}

oregon
12-02-2012, 18:58
La fseek non serve a nulla e puoi eliminarla ...

Per leggere un char meglio utilizzare la fgetc.

Il nome di file nel programma e quello che hai detto sono diversi ... non che non apri correttamente il file ? Devi controllare il risultato della fopen ...

spALT96
12-02-2012, 22:23
ciao grazie, per la risposta... il nome del file corretto nel programma; infatti con un debug vedo che apre correttamente e legge carattere per carattere il file.

Il problema che non trova EOF... non chiude il ciclo.

La fseek la uso per incrementarel'offset dall'inizio del file del puntatore; l'ho usata perch nell'esercizio era richiesta.

spALT96
12-02-2012, 22:45
caspita con la fgetc mi legge correttamente l' EOF...
forse non possibile con la fscanf.

beh devo usare la fgetc mi sa.



#include<stdio.h>
#define FNAME "costituz.txt"

int main () {
FILE * punt;
punt= fopen(FNAME, "r");
int i, nr;
char c;
i= 0;
nr= 0;
while ( c!= EOF ) {
c= fgetc(punt);
// fseek(punt, i, SEEK_SET);
// fscanf(punt, "%c", &c);
if ((c=='r') || (c=='R')) {
nr++;
}
i++;
}
printf("\nCi sono %d lettere nel file FNAME e %d lettere r", i, nr);
getchar();
fclose(punt);
}

oregon
12-02-2012, 22:53
Guarda, io ti suggerisco di modificarlo cos ... tieni presente che la fseek non serve ... non puoi utilizzarla se non serve ...



int main ()
{
FILE * punt;
int i, nr;
char c;

i = nr = 0;
punt= fopen(FNAME, "r");
while ((c = fgetc(punt))!= EOF)
{
printf("%d ", (int)c);
if ((c=='r') || (c=='R')) nr++;
i++;
}
fclose(punt);

printf("\nCi sono %d caratteri nel file FNAME e %d lettere r", i, nr);

getchar();

return 0;
}


... poi decidi tu ...

spALT96
13-02-2012, 15:42
s mi sembra pi lineare la tua soluzione, grazie.

Loading