Ir ao conteúdo
  • Cadastre-se
DNeto

Programa não executa como esperado

Recommended Posts

Boa tarde!

O objetivo deste programa é mostrar quantas consoantes uma frase tem.

 

 

#include <stdio.h>
#include <stdlib.h>
int conta_vogais(char string[])
{
    int i=0;
    int vogais=0;
    while(string!='\0'){
        if(string=='a'||string=='A'){
            vogais++;
        }
        if(string=='e'||string=='E'){
            vogais++;
        }
        if(string=='i'||string=='I'){
            vogais++;
        }
        if(string=='o'||string=='O'){
            vogais++;
        }
        if(string=='u'||string=='U'){
            vogais++;
        }
        i++;
    }
    return vogais;
}
int main(void)
{
    int soma;
    int consoantes = 0;
    int j=0;
    char uma_string[]="Sou uma string";
    while (uma_string[j]!='\0'){
        j++;
        soma=soma+j;
    }
    int vogais=conta_vogais(uma_string);
    printf("Vogais:%d\n", vogais);
    consoantes=soma - vogais;
    printf("Consoantes=%i\n", consoantes);
    system("pause");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um desses uma vez... deixo ele aqui.

#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(); // porém você 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 < (int)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;
}

Não tem muito mistério, acredito que não precise de muita explicação, se tiver duvidas pergunte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explicação no código:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>//isdigit(int)

int conta_vogais(char string[]) 
{
    int i=0;
    int vogais=0;
    while(string[i] !='\0'){//sempre usar o indice [int]
        if(string[i]=='a'||string[i]=='A'){
            vogais++;
        }
        else if(string[i]=='e'||string[i]=='E'){//como nao vamos verificar o valor duas vezes caso ja encontramos acima, temos que usar else,
            vogais++;							//assim se encontrarmos em um dos else ifs, ele não ira ver nos outros abaixos.
        }
        else if(string[i]=='i'||string[i]=='I'){
            vogais++;
        }
        else if(string[i]=='o'||string[i]=='O'){
            vogais++;
        }
        else if(string[i]=='u'||string[i]=='U'){
            vogais++;
        }
        i++;
    }
    return vogais;
}
int main(void)
{
    int soma;
    int consoantes = 0;
    int j=0;
    char uma_string[]="Sou uma string";
    
    while (uma_string[j]!='\0'){
        if(uma_string[j] != ' ' && !isdigit(uma_string[j])) //Se não for espaco e numero
		   consoantes++;//então acrescentar consoantes - sendo que so depois obtemos o valor original de consoantes
		   j++;
    }
    
    int vogais=conta_vogais(uma_string);//Obter valor de vogais
    consoantes-=vogais;//consoantes = consoantes - vogais , obter valor original de consoantes
    
    printf("Vogais:%d\n", vogais);
    printf("Consoantes=%d\n", consoantes);
    system("pause");
}

Portanto, seu único erro deve ter sido o não uso de índice , no vetor string em conta_vogais(), portanto não sei dizer, pois poderia ter sido removido se você postou o codigo direto sem <> code.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×