Cluster (Normal User)
Newbie
Messaggi: 2
Iscritto: 25/03/2011
|
Ciao a tutti!
Come potrete notare sono nuovo del forum.
Mi sono appassionato al C e, avendo già una buona padronanza di tutti i vari costrutti di questo linguaggio, ho provato a creare qualcosa di un po' più complicato (almeno per me).
Ho scritto un programma che memorizza in un vettore di 100 elementi (a breve ci sarà anche una versione con array ridimensionabili grazie all'ausilio di puntatori e allocazione di memoria. :-D) tutti i vari caratteri digitati dalla tastiera.
Il problema è che quando vado ad eseguire il secondo ciclo, ovvero quello che dovrebbe passare a trova_caratteri() ogni singolo elemento del vettore, mi parte un ciclo infinito e non ho ancora capito il perché.
Se scrivo la parola "ciao" il programma funzine benissimo, ma se scrivo parole più lunghe, non va.
Ho provato a fare anche tutte le varie prove per vedere se la funzione restituiva i valori giusti, se si inceppasse, ecc... Se gli passo un solo elemento alla volta, va tutto bene... appena provo a passarglieli con il ciclo for, parte il ciclo infinito.
Please, help me!!!!
Ecco il codice del programma in questione:
Codice sorgente - presumibilmente C++ |
#include <stdio.h> char vocali[] = {'a', 'e', 'i', 'o', 'u', '\0'}; char consonanti[] = {'b', 'c', 'd', 'f', 'g', 'h', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'z', '\0'}; char numeri[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0'}; int trova_caratteri(char); int i; int main(void){ char vettore[100], c; int car = 0, spazi = 0, tab = 0, voc = 0, cons = 0, num = 0, div = 0; printf("Inserire testo: "); while ((c = getchar()) != '\n') vettore[i++] = c; vettore[i] = '\0'; for (i = 0; i < strlen(vettore); i++) switch(trova_caratteri(vettore[i])){ case 0: spazi++; break; case 1: tab++; break; case 2: voc++, car++; break; case 3: cons++, car++; break; case 4: num++, car++; break; case 5: div++, car++; break; } system("cls"); printf("Il testo digitato e': \n\n"); printf("%s", vettore); printf("\n\nNel testo digitato ci sono: \nCaratteri: %d\nSpazi: %d\nTabulazioni: %d\n" "Consonanti: %d\nVocali: %d\nNumeri: %d\nAltri caratteri: %d\n\n", car, spazi, tab, cons, voc, num, div); system("pause"); return 0; } int trova_caratteri(char a){ if (a == ' ') return 0; else if (a == '\t') return 1; else { for (i = 0; i < strlen(vocali); i++) if (a == vocali[i]) return 2; for (i = 0; i < strlen(consonanti); i++) if (a == consonanti[i]) return 3; for (i = 0; i < strlen(numeri); i++) if (a == numeri[i]) return 4; } return 5; }
|
Grazie in anticipo per l'aiuto che eventualmente vorrete darmi.
P.S.=Complimenti per il forum e per il sito in generale. Sono molto utili per chi, come me, ha voglia di cominciare a programmare partendo da zero.
|