Ir ao conteúdo

Posts recomendados

Postado

Gente, estou fazendo um exercício da cadeira de introdução a programação com o seguinte enunciado: "Faça um programa que leia o sexo(char) M ou F, a idade (int) e o salário (float) de uma pessoa entrevistada. Após ler os dados de um entrevistado o programa deve perguntar ao usuário se ele deseja informar os dados de mais uma pessoa (‘s’ ou ‘n’). Ao final, depois de ler todos os dados dos entrevistados, o programa deverá exibir a média de idades de cada um dos sexos e a média de salários de cada um dos sexos.". Até agora consegui desenvolver somente o que está abaixo, mas não sei como prosseguir e está dando alguns erros quando vou digitar os dados da segunda pessoa.

<

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

int main(){
    setlocale(LC_ALL, "Portuguese");

    char sexo;
    int idade , idadem , idadef , midadef , midadem , dm , df , t;
    float salario , salariom , salariof , msalariom , msalariof;

    t = 1;
    df = 0;
    dm = 0;
    idadef = 0;
    idadem = 0;
    salariof = 0;
    salariom = 0;

    while (t == 1){
        system("cls");
        printf("Sexo (M/F): ");
        scanf("%c", &sexo);

        if (sexo == 'M' || sexo == 'm'){
            printf("Idade: ");
            scanf("%d" , &idade);
            printf("Salário: ");
            scanf("%f" , &salario);
            idadem = idadem + idade;
            salariom = salariom + salario;
            dm++;
        }else{
            printf("Idade: ");
            scanf("%d" , &idade);
            printf("Salário: ");
            scanf("%f" , &salario);
            idadef = idadef + idade;
            salariof = salariof + salario;
            df++;
        }
        printf("Informar dados de outra pessoa? (0/1): ");
        scanf("%d", &t);
    }
    midadef = idadef / df;
    printf("Média de idade das mulheres: %d", midadef);

    midadem = idadem / dm;
    printf("Média de idade dos homens: %d", midadem);

    msalariof = salariof / df;
    printf("Média do salário das mulheres: %f", msalariof);

    msalariom = salariom / dm;
    printf("Média do salário dos homens: %f", msalariom);

    return 0;
}
>

Postado
7 horas atrás, Bruna Veber disse:

mas não sei como prosseguir e está dando alguns erros quando vou digitar os dados da segunda pessoa

Deve ser um problema como o buffer do teclado, geralmente getchar resolve. Tente colocar após este scanf,

 

printf("Informar dados de outra pessoa? (0/1): ");
scanf("%d", &t);
getchar();

 

Postado

@Midori Muito obrigada!!! funcionou certinho!

adicionado 35 minutos depois

Tenho mais uma dúvida. Como ficaria pra colocar no lugar de 0/1 dessa parte do código s/n?

< }
        printf("Informar dados de outra pessoa? (0/1): ");
        scanf("%d", &t);
    }

>

Já tentei colocar t='s'; e dentro da condição do while (t == 's'){ ... }, mas não da certo 😕

 

ps: já coloquei a variável t como char e também não funcionou

Postado

Pode ser feito assim:

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

int main() {
    setlocale(LC_ALL, "Portuguese");

    char sexo = ' ';
    char repetir = ' ';

    int idade = 0;
    int idadem = 0;
    int idadef = 0;
    int midadef = 0;
    int midadem = 0;
    int dm = 0;
    int df = 0;

    double salario = 0.0;
    double salariom = 0.0;
    double salariof = 0.0;
    double msalariom = 0.0;
    double msalariof = 0.0;

    do {
        system("cls");
        printf("Sexo (M/F): ");
        scanf(" %c%*c", &sexo);

        printf("Idade: ");
        scanf(" %d%*c", &idade);

        printf("Salário: ");
        scanf(" %f%*c", &salario);

        if (sexo == 'M' || sexo == 'm') {
            idadem = idadem + idade;
            salariom = salariom + salario;
            dm++;
        } else {
            idadef = idadef + idade;
            salariof = salariof + salario;
            df++;
        }

        printf("Informar dados de outra pessoa? (S / N): ");
        scanf(" %c%*c", &repetir);
    } while (repetir == 'S' || repetir == 's');

    if (df != 0) {
        midadef = idadef / df;
    } else {
        midadef = 0;
    }
    printf("Média de idade das mulheres: %i \n", midadef);

    if (dm != 0) {
        midadem = idadem / dm;
    } else {
        midadem = 0;
    }
    printf("Média de idade dos homens: %i \n", midadem);

    if (df != 0) {
        msalariof = salariof / df;
    } else {
        msalariof = 0.0F;
    }
    printf("Média do salário das mulheres: %.2f \n", msalariof);

    if (dm != 0) {
        msalariom = salariom / dm;
    } else {
        msalariom = 0.0F;
    }
    printf("Média do salário dos homens: %.2f \n", msalariom);

    return 0;
}

 

adicionado 16 minutos depois

Poderia ser feito assim também:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <locale.h>

int main() {
    setlocale(LC_ALL, "Portuguese");

    char sexo = ' ';
    char repetir = ' ';

    int idade = 0;
    int mediaIdadeFeminino = 0;
    int mediaIdadeMasculino = 0;
    int totalFeminino = 0;
    int totalMasculino = 0;

    double salario = 0.0;
    double mediaSalarioFeminino = 0.0;
    double mediaSalarioMasculino = 0.0;

    do {
        // Fica pedindo sexo enquanto a letra for invalida
        do {
            system("cls");
            printf("Sexo (F / M): ");
            scanf(" %c%*c", &sexo);
            sexo = _toupper(sexo);  // Deixa a letra em maiuscula
        } while (sexo != 'F' && sexo != 'M');

        printf("Idade: ");
        scanf(" %d%*c", &idade);
        idade = abs(idade);         // Impede valor negativo

        printf("Salário: ");
        scanf(" %f%*c", &salario);
        salario = fabs(salario);    // Impede valor negativo

        // Atribui os dados de acordo com o sexo
        if (sexo == 'F') {
            mediaIdadeFeminino += idade;
            mediaSalarioFeminino += salario;
            totalFeminino += 1;
        } else if (sexo == 'M') {
            mediaIdadeMasculino += idade;
            mediaSalarioMasculino += salario;
            totalMasculino += 1;
        } else {
            // Isso nunca deveria ser exibido
            printf("[ E ]: Erro inesperado. Verifique o do-while do sexo. \n");
            exit(EXIT_FAILURE);     // Encerra o programa com codigo de erro
        }

        // Fica pedindo confirmacao enquanto a letra for invalida
        do {
            printf("Informar dados de outra pessoa? (S / N): ");
            scanf(" %c%*c", &repetir);
            repetir = _toupper(repetir);    // Deixa a letra em maiuscula
        } while (repetir != 'S' && repetir != 'N');
    } while (repetir == 'S' || repetir == 's');

    // So calcula as medias se houverem pessoas do sexo em questao
    if (totalFeminino != 0) {
        mediaIdadeFeminino /= totalFeminino;
        mediaSalarioFeminino /= totalFeminino;
    }

    // So calcula as medias se houverem pessoas do sexo em questao
    if (totalMasculino != 0) {
        mediaIdadeMasculino /= totalMasculino;
        mediaSalarioMasculino /= totalMasculino;
    }

    // Exibe tudo
    printf("Média de idade das mulheres: %i \n", mediaIdadeFeminino);
    printf("  Média de idade dos homens: %i \n", mediaIdadeMasculino);
    printf("Média do salário das mulheres: R$ %.2f \n", mediaSalarioFeminino);
    printf("  Média do salário dos homens: R$ %.2f \n", mediaSalarioMasculino);

    return EXIT_SUCCESS;
}

 

Postado
4 horas atrás, Bruna Veber disse:

Já tentei colocar t='s'; e dentro da condição do while (t == 's'){ ... }, mas não da certo 😕

Com while (t == 's') vai dar certo, considere letra maiúscula também: while (t == 's' || t =='S').

 

Seu programa ainda pode estar com o mesmo problema de antes com o buffer. Em vez de usar getchar faça como o @AdrianoSiqueira fez nos scanf, p.ex

 

scanf(" %d%*c", &idade);

 

Coloque um espaço no início e %*c no fim.

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!