Jump to content
Fórum Script Brasil
  • 0

Exercicio com nome


Luis Paulo Silva Pereira
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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;
}
Edited by vangodp
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.1k
    • Total Posts
      647.1k
×
×
  • Create New...