Ir ao conteúdo
  • Cadastre-se

C++ Programa em C++ utilizando while ou do-while


Bruna Veber

Posts recomendados

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;
}
>

Link para o comentário
Compartilhar em outros sites

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();

 

Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
Compartilhar em outros sites

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;
}

 

Link para o comentário
Compartilhar em outros sites

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.

 

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!