Ir para conteúdo
Fórum Script Brasil
  • 0

Exercicio com nome


Luis Paulo Silva Pereira

Pergunta

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;
}
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

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 por vangodp
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...