Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    9

    Count char ( C )

    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

    codice:
    #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);
        }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    9
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    9
    caspita con la fgetc mi legge correttamente l' EOF...
    forse non è possibile con la fscanf.

    beh devo usare la fgetc mi sa.

    codice:
    #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);
        }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda, io ti suggerisco di modificarlo così ... tieni presente che la fseek non serve ... non puoi utilizzarla se non serve ...

    codice:
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    9
    sì mi sembra più lineare la tua soluzione, grazie.

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.