Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Guilherme Corintho

Algoritmo - Porque está contando todas as letras?

Recommended Posts

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?

Editado por Guilherme Corintho

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    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






    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

    ×