Oppure

Loading
12/01/10 18:07
int codnom(const char *str, char *buf){
    int i;
    int conso;
    conso=0;
    if (!str || !buf)
        return -1;
    for(i = 0; (*str != '
int codnom(const char *str, char *buf){
    int i;
    int conso;
    conso=0;
    if (!str || !buf)
        return -1;
    for(i = 0; (*str != '{parsed_message}') && (i < 4); str++)
      if ( !isvocal(*str) ){
        if (i != 1)
          *(buf++) = *str;
        i++;
        conso++;
      }
      if (conso<=3){
        for (i=j=1;j <=3; i++) {
        if (!isvocal(str[i])) {
            buf[j] = str[i];
            j++;
        }
        
    }
}
    return 0;
}


Perchè se inserisco un nome che ha consonati <= 3 la parte del CF riservata al nome non è esatta?
P.S. Grazie in anticipo...:):):)') && (i < 4); str++) if ( !isvocal(*str) ){ if (i != 1) *(buf++) = *str; i++; conso++; } if (conso<=3){ for (i=j=1;j <=3; i++) { if (!isvocal(str[i])) { buf[j] = str[i]; j++; } } } return 0; }


Perchè se inserisco un nome che ha consonati <= 3 la parte del CF riservata al nome non è esatta?
P.S. Grazie in anticipo...:):):)
12/01/10 18:15
ingMark
Nel ciclo in cui controlli il caso che le consonanti siano minori o uguali a 3 hai sbagliato il parametro di isvocal().
Gli passi str e non *str.

Senza offesa ma la mia impressione è che tu abbia copiato il pezzo sopra del tuo codice dal suggerimento di totem, senza però averci capito molto ;)
Se non ti trovi coi puntatori inizia con gli array e poi vai per gradi.

Prova a passare *str a isvocal() e poi dicci cosa esce.

EDIT: il compilatore dovrebbe darti anche un bel warning:k:
EDIT2: ovviamente anche a buf[j] devi assegnare *str e non str
Ultima modifica effettuata da ingMark 12/01/10 18:18
aaa
12/01/10 18:22
Ho seguito alla lettera il tuo suggerimento ma niente da fare
12/01/10 18:27
ingMark
quello era solo un errore sintattico.
Adesso veniamo agli altri :D
Non va non aiuta molto chi ti deve rispondere :P
Dovresti precisare se ricevi degli errori in fase di compilazione oppure no.
Se non ricevi qual'è poi l'output del programma?

Se posso avanzare un ipotesi del perchè "non vada" direi che il for in cui consideri il caso di conso <= 3 non ha molto senso.

if (conso<=3){ 
        for (i=j=1;j <=3; i++) { 
        if (!isvocal(*str)) { 
            buf[j] = *str; 
            j++; 


Cosi facendo aumenti j e i, ma sapresti spiegarmi cos'è i?
Sono convinto che con i tu vuoi intendere la lettera i-esima di str.
Ma cosi non funziona :k:
Per leggere la lettera i-esima di str puoi modificare il tuo for in maniera simile al primo, oppure usare str come array e non come puntatore
aaa
12/01/10 18:34
Questo è l'output
P.S. Per il luogo di nascita il prof ci ha detto di fare cosi non so perchè
13/01/10 16:23
Il Totem
Nel mio esempio i * erano al posto giusto, comunque. E i conta il numero delle consonanti (notare che conso++ è dopo i++ e conso=0 poco prima di i=0), quindi conso è ridondante.

Mi hai chiesto tu di saltare la seconda consonante, e così viene fuori il i!=1 e sparisce la "c".
Ultima modifica effettuata da Il Totem 13/01/10 16:25
aaa