Newsgroup: it.comp.lang.c
Titolo: funzione che....non funziona!

Ciao  a tutti,
sto scrivendo una funzione che, letto una parola da un file, deve renderla
minuscola e metterla su un vettore.
Ora, il problema è questo, non capisco  perchè il vettore risulti "vuoto", o
meglio, non con la parola che avrebbe dovuto prendere.
Qualcuno mi saprebbe dare una mano?
All'inizio faccio un controllo se la parola è alfanumerica (altrimento
ritorno 0).
Purtroppo devo fare questo "giro enorme" perchè non posso usare funzioni
standard del C, ma le devo creare io.
grazie!!!!
Andrea
int getWord(FILE *fp, char *word){
char vett[128];
int t,i=0;
int ctrl=0;            //flag di controllo se ? una parola alfanumerica
if (currentChar == EOF) return 0;   //non esiste parola, restituisco 0;
while(!((currentChar==MINUSCOLA)||(currentChar==MAIUSCOLA)|
(currentChar==NUMERO))) { //finchè non  un carattere accettato, vado avanti
                  currentChar = getc(fp);
                if (currentChar == EOF) return 0;
        }
        while ((currentChar==MINUSCOLA)||(currentChar==MAIUSCOLA)|
(currentChar==NUMERO)){ //Se è un carattere accettato, lo metto nel vettore     
                                momentaneo
        vett[i++]=currentChar;
        currentChar = getc(fp);
        }
        vett[i]='\0';
        t=i;   //finisco la parola
                for (i=0;i<t;i++){                      //minuscolizzo la parola e controllo
                                                        //se non ? un numero
                vett[i]=tolower(vett[i]);
                if ((vett[i]==MINUSCOLA)||(vett[i]==MAIUSCOLA))
                        ctrl=1;
                }
        if (ctrl==0) return 0;
        else
                for(i=0;i<t;i++){
                word[i]=vett[i];
                }
        return t-1;
        }

         }
Ciao
Matiz

 di un numero o che il file era finito..))
Giusto!
Grazie per i consigli, spero di riuscire a farlo funzionare!!!
Ciao
Andrea

 
bè vediamo, quando tu scrivi questo pezzo di codice
currentChar == MINUSCOLA
questo viene espanso così:
currentChar == ((currentChar>='a')&&(currentChar<='z'))
ora, supponiamo che in currentChar hai la lettera 'p' (che è minuscola),
ottieni una cosa del genere:
p == ( ( p >= 'a' ) && ( p <= 'z' ) )
l'espressione "p >= 'a'" è vera ? sì, quindi viene interpretata
numericamente come 1. stessa cosa per "p <= 'z'", quindi abbiamo:
p == ( 1 && 1 )
cioè
p == 1 
il codice ascii di 'p' non è 1, quello di nessuna lettera minuscola è 1,
quindi non funziona mai :)
una forma corretta di quello che volevi fare tu la puoi ottenere così:
#define MINUSCOLA(x)   ((x>='a') && (x<='z'))
#define MAIUSCOLA(x)   ((x>='A') && (x<='Z'))
#define NUMERO(x)      ((x>='0') && (x<='9'))
in questo modo, puoi scrivere (tanto per capirci) in questo modo:
if( MINUSCOLA( currentChar ) || MAIUSCOLA( currentChar ))
	// lettera
else
	// numero
Ciao
Matix
________________________
..in a world far away
  we may meet again..

 #define NUMERO(x)      ((x>='0') && (x<='9'))
e poi faccio, per controlllare se è minuscola una lettera:
MINUSCOLA(lettera)
ma mi da questo errore:
 error: stray '\232' in program
CHe cavolo succede????
Grazie, ciao!
Andrea

 	// numero
Oppure, senza reinventare la ruota:
#include <stdio.h>
#include <ctype.h>
int main(void)
{
     int c = getchar();
     if (islower(c)) {
         printf("%c e` una lettera minuscola\n", c);
     } else if (isupper(c)) {
         printf("%c e` una lettera maiuscola\n", c);
     } else if (isdigit(c)) {
         printf("%c e` una cifra\n", c);
     } else {
         printf("Il carattere immesso non e` "
                "una lettera o una cifra\n");
     }
     return 0;
}

 }
Si, grazie che così è + facile, ma non posso usare queste funzioni.
devo trovare un altro modo di usarle senza ...usarle!
Purtroppo, non so se è il mio compilatore oppure no, ma mi sta dando questi
cavolo di problemi!
Ciao
Andrea

 devo trovare un altro modo di usarle senza ...usarle!
Pardon, mi ero perso il discorso nel primo post. Immagino si tratti di 
qualche esercizio per un corso di programmazione, tipo ``reimplementa 
parte della libreria standard''.
IMHO sono esercizi abbastanza istruttivi, se si vuole comprendere la 
filosofia alla base della libreria C.

Enrico `Trippo' Porreca wrote:

Non lo metto in dubbio, il problema è ...perchè cavolo non mi funziona?????
Non sai quanto mi fanno incavolare quando il problema può non dipendere dal
codice ma da qualcos'altro!
Ciao
Andrea

 Andrea
Ciao
Mati`C

 codice ma da qualcos'altro!
Il problema dipende senz'altro dal codice (a meno che il compilatore non 
sia installato nel modo sbagliato o qualcosa del genere). Dato che hai 
modificato il sorgente dal tuo primo post, ti conviene ripostarlo 
interamente: a questo punto e` abbastanza difficile seguire il filo 
logico altrimenti.

 sia installato nel modo sbagliato o qualcosa del genere).
HO fatto prima a creare direttametne delle funzoni controllo del carattere
in serito,  via + semplice e + veloce.... anceh se il fatt odi usare le
define mi sembrava moolto comodo e carino usarle!
Cmq, ancora non capisco il perchè non mi accettava il define di controllo
che avevo fatto....
Grazie a tutti!
Andrea