Luis Paulo Silva Pereira Postado Julho 23, 2015 Denunciar Share Postado Julho 23, 2015 Pessoal estou fazendo um programinha que recebe um nome e no final exibe separadamente quem são vogais e consoantes. Quando coloco um nome composto ele funciona legal, porém quando coloco um nome simples, ele exibe também um lixo de memória no final. O programa que fiz até agora é esse: #include <stdio.h> int carac (char nome); int cont (char* nome); int main (void) { char nome[50]; int c, vc; scanf (" %49[^\n]s", nome); c = cont(nome); char vogal[c], consoante[c]; int j=0; for (int i=0; i<c; i++) { if (nome == ' ') continue; else { vc = carac(nome); if (vc == 1) { vogal[j] = nome; j++; } } } vogal[j+1] = '\0'; j = 0; for (int i=0; i<c; i++) { if (nome == ' ') continue; else { vc = carac(nome); if (vc == 0) { consoante[j] = nome; j++; } } } consoante[j+1] = '\0'; printf ("VOGAIS = %s\n", vogal); printf ("CONSOANTES = %s\n", consoante); return 0; } int cont (char* nome) { int i, contador=0; for (i =0; nome != '\0'; i++) { contador++; } return contador; } int carac (char nome) { if ((nome == 'a') || (nome== 'e') || (nome=='i') || (nome=='o') || (nome=='u')) return 1; else return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Julho 24, 2015 Denunciar Share Postado Julho 24, 2015 (editado) A forma em que você aborda o problema é um pouco caótica. Não deverias aproveitar os recursos que oferece C? #include <stdio.h> #include <ctype.h> void flush_in() { int ch; while ( ( ch = fgetc ( stdin ) ) != EOF && ch != '\n' ) {} } int main(){ char frase[100] = {0}; int letraAsc2 = 0; int vogal = 0; int consoante = 0; int i; printf("Entre a frase ou nome: "); scanf("%99[^\n]", frase); //leemos maximo 99 letras deixando espaço para o ultimo caracter nulo. flush_in(); // Porem vc já se perguntou o que acontece si superamos esas 99 letras do scanf? Continuam no buffer, melhor livrarnos delas com flush_in ;) printf("\n\n"); for (i=0; i < sizeof(frase); i++ ){ letraAsc2 = tolower ( frase[i]); // transformamos as letras a minusculas, assim sempre sabemos que estamos trabalhando com minusculas sem se preucupar por maiusculas. if ( isalpha(letraAsc2) ){ // Si es una letra alfabetica.... switch (letraAsc2) { case 'a': case 'e': case 'i': case 'o': case 'u': vogal++; printf("Letra %c vogal\n", frase[i] ); break; default: consoante++; printf("Letra %c consoante\n", frase[i] ); break; } } } //Tadahhh!!! printf("\n\nVogal=%d\nconsoante=%d", vogal, consoante); getchar(); return 0; } Editado Julho 24, 2015 por vangodp Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Luis Paulo Silva Pereira
Pessoal estou fazendo um programinha que recebe um nome e no final exibe separadamente quem são vogais e consoantes.
Quando coloco um nome composto ele funciona legal, porém quando coloco um nome simples, ele exibe também um lixo de memória no final.
O programa que fiz até agora é esse:
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.