Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] - Contare parole da stdin

    Salve,
    ho un problema con un algoritmo per contare le parole da stdin. Premetto che avevo fatto la mia versione semplice semplice, ma questo algoritmo è un tantino più elaborato. L'ho copiato pari pari dalla dispensa della professoressa, di cui vi includo il Link :

    codice:
    #include<stdio.h> 
    
    
    typedef enum {FALSE, TRUE} BOOLEAN;
    BOOLEAN test( int c);
    
    int main()
    { 
        BOOLEAN is,fineParola=TRUE;
        int c, nParole=0;   
        printf("\nScrivi una o piu' linee di testo. Per terminare  ctrl z\n"); 
        //  leggi carattere iniziale della linea corrente  */
        c=getchar(); 
        while (c!=EOF){    
              fineParola=TRUE;
              /* leggi   una linea  e conta le parole*/
              while(c!='\n'){ /* verifica se il carattere letto è un separatore */
              is = test(c); 
              
    
                /* se il carattere e' un separatore e l'ultima 
                parola non è terminata  incrementa il numero 
                di parole */
                if(is &&  !fineParola) { 
                fineParola= TRUE;   
                nParole++; 
                }
                else if (!is) 
                fineParola = FALSE; 
                c=getchar(); /*Leggi carattere c – della linea 
                corrente */
                } /* fine scansione linea *
    
              /* Verifica se l’ultimo carattere letto diverso da ‘\n’ definisce una nuova parola */
              if( !is ) 
              nParole++; /* se il penultimo  carattere non e' un separatore*/
              if (is && !fineParola ) {/* se il penultimo carattere e' un   separatore  e l'ultima parola non è terminata   
              incrementa il  numero di parole */
              nParole++; 
              c=getchar(); /* leggi  primo carattere della linea successiva  */
              }    
        }    
    printf(" \n numero di parole =%d \n",  nParole);
    
    
     system("pause");
     return 0;   
    }
    
    
    BOOLEAN test  ( int c)
    /* restituisce TRUE se c è un separatore altrimenti FALSE */
    {BOOLEAN ris;
    ris = (c==' ')||(c=='\t')||(c==',')||(c==';')||(c=='.')||(c==':');
    return ris;
    }
    Il problema è che il programma parte ma non funziona, cioè inserendo un testo qualunque e premendo invio si blocca, senza crashare.

  2. #2
    Mi viene un dubbio, per terminare l'inserimento non devi semplicemente inserire EOF, quindi CTRL + Z se sei su Windows, come tra l'altro ti ha scritto la prof nella prima printf ?
    Se sei su Unix devi usare CTRL + D, prova anche a farlo due volte di seguito...
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  3. #3
    Si su Windows l'eof si inserisce tramite Ctrl+Z, ma il risultato nel programma non cambia...

  4. #4
    Originariamente inviato da Deleted
    Si su Windows l'eof si inserisce tramite Ctrl+Z, ma il risultato nel programma non cambia...
    Non ho provato il tuo programma, ma sul mio mac avevo notato, in un programma in cui veniva chiesto di inserire un testo che veniva poi salvato su un file, che alla fine, non so dirti perchè, dovevo digitare 2 volte "CTRL + D".. Hai provato?
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

  5. #5
    Originariamente inviato da Laikius91
    Non ho provato il tuo programma, ma sul mio mac avevo notato, in un programma in cui veniva chiesto di inserire un testo che veniva poi salvato su un file, che alla fine, non so dirti perchè, dovevo digitare 2 volte "CTRL + D".. Hai provato?
    Si, ho provato (esito negativo). Il problema è che il programma da problemi anche se premi \n, cosa che non dovrebbe succedere.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.