1
resposta

[Dúvida] Dúvida sobre um código que eu estou fazendo em C

Estou fazendo no windows com vscode em ISO 8859-1

Questão proposta: Implemente um algoritmo que leia o nome, telefone, idade, peso, altura e o endereço de uma pessoa e armazene esses dados em uma estrutura. Por fim apresente os dados e IMC dessa pessoa e sua classificação de acordo com os dados abaixo:

  • Menor que 18,5: MAGREZA
  • Entre 18,5 e 24,9: NORMAL
  • Entre 25,0 e 29,9: SOBREPESO
  • Entre 30,0 e 39,9: OBESIDADE
  • Maior que 40,0: OBESIDADE GRAVE

Meu código:

#include <stdio.h>

#include <locale.h>

int main() {

setlocale(LC_ALL, "Portuguese");

float dadosNum[100];
int parada = 1;
char dadosChar[100];
int escolha;
float imc = 0;

do{
printf("\nDigite o número da informação que deseja armazenar\n");
printf("| 0 -> Encerrar \n");
printf("| 1 -> Nome \n");
printf("| 2 -> Idade \n");
printf("| 3 -> Telefone \n");
printf("| 4 -> Peso \n");
printf("| 5 -> Altura \n");
printf("| 6 -> Endereço \n ");
scanf("%d", &escolha);

switch (escolha)
{

//Deixei os printf nos cases para mostrar que ele está guardando o valor certo.
case 0:
    parada = 0;
    break;

case 1:
    printf("Qual é o seu nome ?\n");
    printf("-> ");
    getchar();
    fgets(dadosChar, sizeof(dadosChar), stdin);
    printf("\n%s\n", dadosChar);
    break;

case 2:
    printf("\nQual é a sua idade ?\n");
    printf("-> ");
    scanf("%f", &dadosNum[0]);
    printf("\n%.1f\n", dadosNum[0]);
    break;

case 3:
    printf("\nQual é o seu número de telefone ?\n");
    printf("-> ");
    scanf("%f", &dadosNum[1]);
    getchar();
    printf("\n%.1f\n", dadosNum[1]);
    break;

case 4:
    printf("\nQual é o seu peso em Kg ?\n");
    printf("-> ");
    scanf("%f", &dadosNum[2]);
    printf("\n%.1f\n", dadosNum[2]);
    break;

case 5:
    printf("\nQual é a sua altura em metros ?\n");
    printf("-> ");
    scanf("%f", &dadosNum[3]);
    printf("\n%.2f\n", dadosNum[3]);
    break;

case 6:
    printf("\nQual é o seu endereço ?\n");
    printf("-> ");
    getchar();
    fgets(dadosChar, sizeof(dadosChar), stdin);
    printf("\n%s\n", dadosChar);
    break;

default:
    printf("\nNúmero inválido\n");
    break; 
}
} while(parada != 0);

imc = dadosNum[2] / (dadosNum[3] * dadosNum[3]);
printf("\nSeu imc é: %.1f\n", imc);

if (imc < 18.5) {
    printf("Você está muito magro\n");
}else if (imc >= 18.5 && imc <= 24.9) {
    printf("Você está normal\n");
}else if (imc >= 25.0 && imc <= 29.9) {
    printf("Você está com sobrepeso\n");
}else if (imc >= 30.0 && imc <= 39.9) {
    printf("Você está obeso\n");
}else if (imc > 40.0){
    printf("Você está com obesidade grave\n");
}
printf("\n**Fim do programa**\n");

}

No case 3 ele só armazena até 7 números de entrada certos, o resto fica errado. Gostaria de saber o que eu fiz errado.

1 resposta

Olá Augusto, tudo bem?

Pelo que pude perceber no seu código, você está armazenando o número de telefone em um array de floats, porém o número de telefone não é um número decimal, mas sim um número inteiro. Isso pode estar causando o erro que você mencionou.

Para corrigir esse problema, você pode alterar a variável dadosNum[1] para um inteiro, assim como você fez com a idade (dadosNum[0]). Além disso, você pode utilizar a função scanf("%d", &dadosNum[1]) para ler um número inteiro em vez de um número decimal.

Espero ter ajudado e bons estudos!