Ir ao conteúdo
  • Cadastre-se

Algoritmo - Porque está contando todas as letras?


Posts recomendados

Prezados, Boa tarde,

Gostaria de entender porque esse algoritmo está contando todos os caracteres da string 'frase' em vez de apenas as vogais.

Não quero um outro código pronto, só quero entender isso porque está me intrigando. Valeu!

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    char frase[100];
    printf ("Digite uma frase: ");
    gets(frase);
    int caracteres;
    caracteres = strlen (frase);
    int vogais = 0;
    int cont;
    for (cont = 0; cont < caracteres; cont++){
        if (frase[cont] == 'A' || 'E' ||'I'||'O'||'U'){
            vogais++;
        }
    }
    printf ("A frase possui %d vogais", vogais);

    return 0;
}

 

@edit

 

percebi que se eu escrever assim da certo:         if (frase[cont] == 'A' ||frase[cont] ==  'E' ||frase[cont] == 'I'||frase[cont] == 'O'||frase[cont] == 'U'){

porque não posso escrever da primeira maneira?

Link para o comentário
Compartilhar em outros sites

 

frase[cont] == 'A' || 'E' ||'I'||'O'||'U'

É interpretado assim:

 

(frase[cont] == 'A') || ('E') || ('I') || ('O') || ('U')

 

Chars são um tipo de inteiro, e existem tabelas de conversão como a tabela ASCII que relaciona um número inteiro com um caractere... 'A' por exemplo é igual a 65.

 

Então essa comparação seria o mesmo que:

 

(frase[cont] == 65) || (69) || (73) || (79) || (85)

 

Mas em C qualquer valor diferente de 0 é igual a VERDADEIRO, e 0 é igual a FALSO.

 

Então teremos:

 

(VERDADEIRO OU FALSO?) || VERDADEIRO || VERDADEIRO || VERDADEIRO || VERDADEIRO

 

O que sempre resultará em VERDADEIRO, visto que a operação lógica OU retorna VERDADEIRO se pelo menos 1 dos termos sendo comparados for VERDADEIRO.

 

Então, no seu programa o contador de vogais sempre será incrementado não importa qual a letra na frase.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, isrnick disse:

 


frase[cont] == 'A' || 'E' ||'I'||'O'||'U'

É interpretado assim:

 


(frase[cont] == 'A') || ('E') || ('I') || ('O') || ('U')

 

Chars são um tipo de inteiro, e existem tabelas de conversão como a tabela ASCII que relaciona um número inteiro com um caractere... 'A' por exemplo é igual a 65.

 

Então essa comparação seria o mesmo que:

 


(frase[cont] == 65) || (69) || (73) || (79) || (85)

 

Mas em C qualquer valor diferente de 0 é igual a VERDADEIRO, e 0 é igual a FALSO.

 

Então teremos:

 


(VERDADEIRO OU FALSO?) || VERDADEIRO || VERDADEIRO || VERDADEIRO || VERDADEIRO

 

O que sempre resultará em VERDADEIRO, visto que a operação lógica OU retorna VERDADEIRO se pelo menos 1 dos termos sendo comparados for VERDADEIRO.

 

Então, no seu programa o contador de vogais sempre será incrementado não importa qual a letra na frase.

 

Muito obrigado amigo!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...