Newsgroup: it.comp.lang.c
Titolo: COME SI FA QUESTO?

Ciao raga. Nel mio continuo e costante studio al C vi chiedo purtroppo come
posso creare questo programma. Segue il testo:
"scrivere un programma che utilizzi il reindirizzamento per accettare
l'input da un file su disco, conti il numero di occorrenze di ciascuna
lettera nel file e poi visualizzi il risultato sullo schermo (suggerimento:
utilizzare un array di 26 interi. Per contare ogni carattere, incrementare
l'elemento dell'array appropriato per ogni carattere letto)."
Ma che cavolo sono prima di tutto le occorrenze? MAH!
Siete la mia "bibbia", vi prego di aiutarmi
Grazie


The trouble with being poor is that it takes up all your time.

grazie
"Antonio barbone" <bar...@raffaello.home> ha scritto nel messaggio
news:slrn9j5m57...@barbone.raffaello.home...


ecco un esempio  che conta le lettere minuscole in un file ...
<snip>
Non va bene, devi usare il reindirizzamento.
Il programma giusto (non compilato) e' :
#include <stdio.h>
int main()
{
    int i, c, cont[256] = {0} ;
    while ( ( c = getchar() ) != EOF ) 
    {
          ++cont[c] ;
    }
    for ( i = 0 ; i < 256 ; i++ )
    { 
        if ( cont[i] > 0 ) 
        {
           printf( "ASCII %d compare %d volte\n", i, cont[i] ) ;
        }
    }
    return 0 ;
}

     while ( (c = fgetc (fd)) != EOF)
...
Come mi è stato recentemente segnalato questo è un errore. Infatti fgetc
restiutuisce un int. EOF vale -1 in quasi tutti i sistemi. Per cui se
assegni -1 (0xFFFFFFFF) ad un char, questo valore diventa 0xFF. Quindi la
condizione
 c == EOF è verificata sia quando c vale -1 (e fin qua tutto bene), ma anche
quando vale 255 (0xFF).
Quindi la variavile c va dichiarata int.

 Non va bene, devi usare il reindirizzamento.
altro [snip]
non va bene, devi contare solo le lettere:
"suggerimento: utilizzare un array di 26 interi"
..., ma non ti arrabbiare pero'!  :-)
ciao
donCiccio

 Il programma giusto (non compilato) e' :
scusami Andrea ... "la faccia mia sotto i piedi vostri" .... ma me lo spieghi 
l'errore (a parte il fatto di char c che invece deve essere int) ?
grazie ....


 Quindi la variavile c va dichiarata int.
hai ragione !!!!
grazie per la correzione ....


non va bene, devi contare solo le lettere:
Va bene.
Il mio prg conta ANCHE le lettere.
Se il file utilizzato e' un file di testo, non vedo cos'altro
potresti contare.

l'errore (a parte il fatto di char c che invece deve essere int) ?
Tu apri un file in modo esplicito, mentre la lettura da file e'
una delle possibilita', visto che bisogna usare il
reindirizzamento.

 potresti contare.
spazi, punteggiatura, numeri, etc.
il conto delle sole lettere era richiesto nel testo dell'esercizio (cosi'
come l'uso del reindirizzamento).
cmq.  ...non ti arrabbiare.  :-)
dimmi se questa variante del tuo codice ti piace (non l'ho provata):
#include <stdio.h>
#include <ctype.h>
int main()
{
    int i, c, cont[26] = {0} ;
    while ( ( c = getchar() ) != EOF )
    {
        if( isalpha( c ) )
              ++cont[ tolower( c ) - 'a' ] ;
    }
    for ( i = 0 ; i < 26 ; i++ )
    {
        if ( cont[i] > 0 )
        {
           printf( "La lettera %c compare %d volte\n", 'a' + i, cont[i] ) ;
        }
    }
    return 0 ;
}
ciao
donCiccio

 reindirizzamento.
ah vabbe' .... pensavo peggio ;-)) non avevo letto bene il post ;-)))
ciao
