Ir ao conteúdo
  • Cadastre-se
Bruno Pinto Castilho

Uso do char.

Recommended Posts

Alguem me ajude por favor, quando peço para digitar a cor dos olhos e cabelos, da um erro de que aparece na mesma linha e so da para digitar apenas uma letra...

Compile o algoritmo no seu Dev que você irá entender o que estou querendo dizer na digitação do cor dos olhos e do cabelos, ja tentei varias formas para tentar corrigir, mas não sei o que faz esse erro acontecer.

ja tentei assim também...

printf("Cor dos olhos e depois cor do cabelos: ");

scanf("%c %c", &olhos, &cabelos);

ou

printf("cor dos olhos:");

scanf("%c", &olhos);

printf("cor dos cabelos:");

scanf("%c", &cabelos);

 

mas quando executado aparece na mesma linha e só da para digitar apenas um "char";

 

 

int cont, idade, qtd=0, qtd2=0, porcentagem=0, qtdpessoas=0, qtdidade=0;
    float peso, altura, mediaidades;
    char olhos, cabelos;
    for(cont=1 ; cont<=20 ; cont++)
    {
        printf("Cor dos olhos: ");
        scanf("%c", &olhos);
        printf("Idade: ");
        scanf("%i", &idade);
        printf("Peso: ");
        scanf("%f", &peso);
        printf("Altura: ");
        scanf("%f", &altura);
        printf("Cor dos cabelos: ");
        scanf("%c", &cabelos);

        if(idade>50&&peso<60)
        {
            qtd=qtd+1;
        }
        if(altura<1.50)
        {
            qtdpessoas=qtdpessoas+1;
            qtdidade=qtdidade+idade;
        }
        if(olhos=='A'||olhos=='a')
        {
            porcentagem=porcentagem+1;
        }
        if(cabelos=='R'||cabelos=='r'&&olhos!='A'||olhos!='a')
        {
            qtd2=qtd2+1;
        }
    }
mediaidades=qtdidade/qtdpessoas;
porcentagem=(porcentagem/20)*100;
printf("A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos é: %i", qtd);
printf("A media das idades das pessoas com altura inferior a 1,50 é: %f", mediaidades);
printf("A porcentagem de pessoas com olhos azuis entre todas as pessoas analisadas é: %i", porcentagem);
printf("A quantidade de pessoas ruivas e que não possuem olhos azuis é: %i", qtd2);
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fácil, muda a declaração

 

"char olhos, cabelos;"

 

para

 

char olhos[10], cabelos[15];  

(o numero pode ser qualquer um maior/menor)

 

e quando for capturar os dados onde esta %c de um espaço entre  "  e  %c  ou seja, esta assim "%c" deixe " %c"

 

Vai la.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Gabriel Fernandes Seguro F disse:

Fácil, muda a declaração

 

"char olhos, cabelos;"

 

para

 

char olhos[10], cabelos[15];  

(o numero pode ser qualquer um maior/menor)

 

e quando for capturar os dados onde esta %c de um espaço entre  "  e  %c  ou seja, esta assim "%c" deixe " %c"

 

Vai la.

Depois de deixar char olhos[10]; e char cabelos[15];

 

modifique:

scanf("%c", &olhos);
scanf("%c", &cabelos);

 

para:
scanf("%s", olhos);
scanf("%s", cabelos);

 

E nessa area de if voce muda assim:

if(olhos[0]=='A'||olhos[0]=='a')
        {
            porcentagem=porcentagem+1;
        }
if(cabelos[0]=='R' || cabelos[0]=='r' && olhos[0] !='A' || olhos[0] !='a')
        {
            qtd2=qtd2+1;
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites
22 horas atrás, Bruno Pinto Castilho disse:

scanf("%c %c", &olhos, &cabelos);

 

 

Uma alternativa ao que os colegas disseram é:

 

scanf("%c%c%c",&olhos,&lixo,&cabelos);

O problema com o seu código é aquele espaço antes do segundo %c, se você trocar ele por outro %c resolve.

 

Lembrando que se a cor for capturada dessa forma só pode ser UMA letra, se quiser capturar mais de uma tem que setar o tamanho correto lá na criação do char.

 

Outra coisa que acho necessário pra evitar problemas é limpar o buffer antes de usar o %c, pois se você leu algo antes, um int, um float, ou qualquer coisa vai ficar um "\n" no buffer e ele pega isso antes de ler o teclado.

 

Nesse caso ficaria assim:

 

setbuf(stdin,NULL);
scanf("%c%c%c",&olhos,&lixo,&cabelos);

 

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

×