Ir ao conteúdo
  • Cadastre-se

C Exercicio While em linguagem C.


Posts recomendados

Olá , Boa tarde. Queria saber onde ta o meu erro nesse codigo?
Desde já, agradeço pela duvida tirada.

 

PS : Ao rodar o codigo, a menor idade da pessoa sempre da " 0 " .

 

int main(){

        /*Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados os dados de idade,
        sexo (M/F) e salário. Faça um programa que calcule e mostre:

        a) A media dos salarios do grupo
        b) A  maior e menor idade do grupo
        c) A quantidade de mulheres na região
        d) A idade e o sexo da pessoa que possui o menor salário
        */

        int idade, maioridade, menoridade, qtd_mulheres = 0, soma_salario = 0, qtd_habitantes = 0;
        int idade_menorsalario;
        char sexo, sexo_menorsalario;
        int salario, menor_salario;

        maioridade = 0;
        menoridade = 200;


                while (idade >= 0){

                    printf("\n Informe a idade do entrevistado: ");
                    scanf("%d", &idade);

                          if(idade < 0){
                            break;
                        }

                            if(idade > maioridade){
                            maioridade = idade;

                        }
                            if(idade < menoridade){
                            menoridade = idade;
                        }

                    printf("\n Agora , informe o sexo: ");
                    scanf("%s", &sexo);

                    printf("\nPor ultimo, informe o salario (DIGITE SEM VIRGULA): ");
                    scanf("%d", &salario);

                        if(sexo == 'F'){
                            qtd_mulheres = qtd_mulheres + 1;
                            }

                        if(salario >= 0){
                        soma_salario = soma_salario + salario;
                        qtd_habitantes = qtd_habitantes + 1;
                        }

                        if(menor_salario == 0) {
                        menor_salario = salario;
                        idade_menorsalario = idade;
                        sexo_menorsalario = sexo;
                        }


                            if(salario <= menor_salario){
                            menor_salario = salario;
                            idade_menorsalario = idade;
                            sexo_menorsalario = sexo;
                        }

                }

                printf("\n A menor idade eh: %d", menoridade);
                printf("\n A maior idade eh: %d", maioridade);
                printf("\n A quantidade de pessoas na entrevista eh: %d", qtd_habitantes);
                printf("\n A media salarial da populacao eh: %d", (soma_salario / qtd_habitantes));
                printf("\n A idade da pessoa e o sexo de menor salario foi: %d anos, do sexo: %c", idade_menorsalario, sexo_menorsalario);
                printf("\n A quantidade de mulheres eh: %d", qtd_mulheres);

                return 0;
}


 

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

 printf("\n Agora , informe o sexo: ");
                    scanf(" %c", &sexo);

 

 

voce esta lendo um char nao uma string

 

se você ja declarou essa condicao

  while (idade >= 0){

para que essa?

if(idade < 0){

 

isto aqui pode atribuir  no momento da declaracao.

 int idade, maioridade=0, menoridade=200, qtd_mulheres = 0, soma_salario = 0, qtd_habitantes = 0;

 

isto aqui : qtd_mulheres = qtd_mulheres + 1;

pode ser substituido por isto

qtd_mulheres ++;

 

if(sexo == 'F'){

 

assim voce só vai pegar letras maiusculas tente assim

 

if(sexo == 'F'||sexo=='f'){

 

além disto tem muitas outras coisas. seu algoritmo não está bom.

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

@herbertbahia

3 horas atrás, herbertbahia disse:

se você ja declarou essa condicao

  while (idade >= 0){

para que essa?

if(idade < 0){

Prove digitar um valor menor que 0 sem essa segunda condição. Ele irá continuar pedindo os dados. Já com ela, se detectar um valor menor que 0, já sai do loop e não pede mais nada.

 

@Ricardo_Nascimento Como mencionado por Herbertbahia, tem muitos erros... Se você digitar logo de cara um valor menor que 0, ele vai mostrar tudo que você pediu pra ele imprimir, mas com os valores que você havia inicializado: maioridade = 0, menoridade = 200, etc. Você teria que colocar uma condição fora do loop para caso qtd_habitantes == 0, não se imprima nada.

Pedir um salário do tipo inteiro não faz sentido, ao invés de dizer "Por ultimo, informe o salario (DIGITE SEM VIRGULA)", simplesmente declare salário como ponto flutuante.

Lembre-se de usar um contador para informar o usuário de qual habitante se trata: habitante 1, 2, etc.

Teste isso:

#include <stdio.h>
#include <locale.h>

int main(){

    /*Foi feita uma pesquisa entre os habitantes de uma região. Foram coletados os dados de idade,
    sexo (M/F) e salário. Faça um programa que calcule e mostre:

    a) A media dos salarios do grupo
    b) A  maior e menor idade do grupo
    c) A quantidade de mulheres na região
    d) A idade e o sexo da pessoa que possui o menor salário
    */

    setlocale(LC_ALL, "Portuguese");
    int idade = 0, maioridade = 0, menoridade = 200, qtd_mulheres = 0, qtd_habitantes = 0, idade_menorsalario, i = 0;
    char sexo, sexo_menorsalario;
    float salario, menor_salario = 0, soma_salario = 0;


    while (idade >= 0){
        i++;
        printf("\n Informe a idade do entrevistado %d: ", i);
        scanf("%d", &idade);
        
        while(idade > 100){
            printf("\n Idade inválida, digite a idade do entrevistado %d novamente: ", i);
            scanf("%d", &idade);
        }

        if(idade < 0){
            break;
        }

        if(idade > maioridade){
            maioridade = idade;

        }
        if(idade < menoridade){
            menoridade = idade;
        }

        printf("\n Agora, informe o sexo do entrevistado %d (M/F): ", i);
        scanf("\n%c", &sexo);
        
        while((sexo != 'M') && (sexo != 'F')){
            printf("\n Sexo inválido, digite o sexo do entrevistado %d novamente: ", i);
            scanf("\n%c", &sexo);
        }

        printf("\n Por fim, informe o salário do entrevistado %d: ", i);
        scanf("%f", &salario);
        
        while(salario < 0){
            printf("\n Valor inválido, digite o salário do entrevistado %d novamente: ", i);
            scanf("%f", &salario);
        }
        
        soma_salario += salario;
        qtd_habitantes++;

        if(sexo == 'F'){
            qtd_mulheres++;
        }
    
    
        if((menor_salario == 0) || (salario <= menor_salario)) {
            menor_salario = salario;
            idade_menorsalario = idade;
            sexo_menorsalario = sexo;
        }

    }
    
    if(qtd_habitantes == 0){
        printf("\n Você precisa inserir os dados de um habitante ao menos!");
        return 0;
    }
    
    soma_salario /= qtd_habitantes;
    
    printf("\n A menor idade é: %d", menoridade);
    printf("\n A maior idade é: %d", maioridade);
    printf("\n A quantidade de pessoas na entrevista é: %d", qtd_habitantes);
    printf("\n A média salarial da população é: %.2f", soma_salario);
    printf("\n A idade da pessoa e o sexo de menor salário foi: %d anos, do sexo: %c", idade_menorsalario, sexo_menorsalario);
    printf("\n A quantidade de mulheres é: %d", qtd_mulheres);

    return 0;
}

 

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

Obrigado pessoas. Me desculpem os erros, comecei na programação tem pouco tempo e continuarei a me dedicar. Irei me atentar as correções. Fico grato!

 

adicionado 30 minutos depois

Eu queria entender o porque no CodeBlock ele da erro com esse código enviado por Luccas Rodrigues, mas no online compiler ele funciona normalmente. Segue o Print em anexo.

image.thumb.png.a8dbefe0082f1e3354c5d849c9993ca8.png

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

1 hora atrás, Ricardo_Nascimento disse:

Eu queria entender o porque no CodeBlock ele da erro com esse código enviado por Luccas Rodrigues, mas no online compiler ele funciona normalmente. Segue o Print em anexo

 

E que erro é que "ele dá"?  Não entendi.

 

Quanto ao seu problema da menoridade:

 

    while (idade >= 0) {

 

Seu programa começa assim. Só que você não inicializou idade. Então como é uma área que acabou de ser recebida do sistema para alocar as suas variáveis está tudo zerado, certo?

Inclusive a idade. 

 

Quando você entra no loop com idade igual a zero a primeira coisa que acontece é copiar

        if (idade < menoridade)
        {
            menoridade = idade;
        }

já que menoridade é 200 e idade é zero. E aí nunca mais esse valor vai sair de lá. Só sairia com uma idade negativa, mas aí o programa termina porque saí do loop com essa condição. Então não é surpresa que menoridade seja sempre zero...

 

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

1 hora atrás, Ricardo_Nascimento disse:

Eu queria entender o porque no CodeBlock ele da erro com esse código enviado por Luccas Rodrigues, mas no online compiler ele funciona normalmente.

eheheh!

 

Boa Tarde!

Olha, com a variável idade não inicializada vem qualquer inteiro que estava lá antes na memória. Pra piorar é negativo.

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

1 hora atrás, Mauro Britivaldo disse:

Boa Tarde!

Olha, com a variável idade não inicializada vem qualquer inteiro que estava lá antes na memória. Pra piorar é negativo

 

Não, não é negativo.

 

Como parte da iniciativa para evitar inserção de código malicioso --- hacking --- toda área de memória alocada para um programa é inicialmente zerada. Então idade entra com zero e fica assim para todo o sempre.

 

Se prestar atenção ao programa, e ao que o autor disse e ao que expliquei acima, fica claro que o programa dele entrou no loop e apenas mantem menoridade com zero pela razão que você notou.

 

Se idade fosse negativo o  programa apenas mostraria os totais e terminaria, já que a condição do while não seria satisfeita...

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...