Ir ao conteúdo
  • Cadastre-se
kamiLuke12

C RESOLVIDO Total da variável não exibe (do while)

Recommended Posts

Olá pessoal,

 

Preciso de uma ajuda nesse programa abaixo... estou tentando exibir o total dos valores, mas não estou conseguindo:

alguma dica ou sugestão?

//Escolhendo pessoas
//Escolher homens, mais de 18 anos, cabelo castanho
//Mulheres, entre 25 e 30, Loiras

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

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {
    
    int idade, cabeloCastanho, cabeloLoiro;
    char sexo, resp, corC;
    
    do {
        printf("============================\n");
        printf("    Seletor de Pessoas        \n");
        printf("============================\n");
        printf("Qual o sexo? [M/F]: ");
        scanf("%c", &sexo);
        limpa_linha();
        printf("Qual idade? ");
        scanf("%d", &idade);
        limpa_linha();
        printf("Qual a cor do cabelo? \n");    
        printf("[1] Preto\n");
        printf("[2] Castanho\n");
        printf("[3] Loiro\n");
        printf("[4] Ruivo\n\n");
        scanf("%c", &corC);
        limpa_linha();
        
        if(sexo == 'M' && idade > 18 && corC == 2){
            cabeloCastanho = cabeloCastanho +1;
        }
        else{
            if(sexo == 'F' && idade >= 25 && idade <= 30 && corC == 3){
                cabeloLoiro = cabeloLoiro + 1;
            }
        }
    
        printf("Quer continuar? [S/N]: ");
        scanf("%c", &resp); // aqui e um caractere, logo o uso do "%c"
        limpa_linha();
        
    } while (resp == 's' || resp == 'S');
    printf("Total de homens com mais de 18 anos e cabelo castanho: %d\n", cabeloCastanho);
    printf("Total de mulhere entre 25 e 30 anos com cabelo loiro: %d", cabeloLoiro);
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

As variáveis não são inicializadas (com valor 0), então tá pegando o valor lixo qualquer que já estava na memória e somando sobre ele.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
19 horas atrás, kamiLuke12 disse:

Preciso de uma ajuda nesse programa abaixo... estou tentando exibir o total dos valores, mas não estou conseguindo:

 

Faltou informar o que acontece...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora foi ;)!

 

//Escolhendo pessoas
//Escolher homens, mais de 18 anos, cabelo castanho
//Mulheres, entre 25 e 30, Loiras

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

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {
    
    int idade, cabeloCastanho=0, cabeloLoiro=0, corC;
    char sexo, resp;
    
    do {
        printf("============================\n");
        printf("    Seletor de Pessoas        \n");
        printf("============================\n");
        printf("Qual o sexo? [M/F]: ");
        scanf("%c", &sexo);
        limpa_linha();
        printf("Qual idade? ");
        scanf("%d", &idade);
        limpa_linha();
        printf("Qual a cor do cabelo? \n");    
        printf("[1] Preto\n");
        printf("[2] Castanho\n");
        printf("[3] Loiro\n");
        printf("[4] Ruivo\n\n");
        scanf("%d", &corC);
        limpa_linha();
        
        if(sexo == 'M' && idade > 18 && corC == 2){
            cabeloCastanho = cabeloCastanho +1;
        }
        else{
            if(sexo == 'F' && idade >= 25 && idade <= 30 && corC == 3){
                cabeloLoiro = cabeloLoiro + 1;
            }
        }
    
        printf("Quer continuar? [S/N]: ");
        scanf("%c", &resp); // aqui e um caractere, logo o uso do "%c"
        limpa_linha();
        
    } while (resp == 's' || resp == 'S');
    printf("Total de homens com mais de 18 anos e cabelo castanho: %d\n", cabeloCastanho);
    printf("Total de mulhere entre 25 e 30 anos com cabelo loiro: %d", cabeloLoiro);
    return 0;
}
 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@kamiLuke12 Ao invés de criar a função "limpa_tela", você pode usar "system("cls");"

 

Creio que em seu código, quando pergunta se a pessoa deseja continuar, ela digita o caracter e aperta o ENTER. Não sei se você quer especificamente desse modo, mas tem como fazer com que a pessoa apenas tecle "S" ou "N" sem precisar teclar ENTER posteriormente.

 

Basta usar "resp=getch(resp);"

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, F1rmeza disse:

Ao invés de criar a função "limpa_tela", você pode usar "system("cls");"

 

A função dele é limpa linha, não limpa tela, ela faz outra coisa (o nome_limpa linha não é muito descritivo do que ela faz, eu preferiria clear_stdin ou algo assim).

 

 

8 minutos atrás, F1rmeza disse:

Creio que em seu código, quando pergunta se a pessoa deseja continuar, ela digita o caracter e aperta o ENTER. Não sei se você quer especificamente desse modo, mas tem como fazer com que a pessoa apenas tecle "S" ou "N" sem precisar teclar ENTER posteriormente.

 

Basta usar "resp=getch(resp);"

 

getch() não é função padrão da linguagem, faz parte da biblioteca não padrão conio que contém funções exclusivas para o prompt MS-DOS do Windows, portanto precisa dessa biblioteca, e o código só funcionará em sistemas Windows.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

limpar_linha: deve ser um tradução de clear_line, provavelmente influenciado por getline de fstream no C++. Ou por WriteLine no C#.

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

×