Ir ao conteúdo

Posts recomendados

Postado

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?

Postado

 

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
Postado
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
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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!