Ir ao conteúdo
  • Cadastre-se
NhemonF

C Problemas no ''IF...ELSE IF..."

Posts recomendados

Bom dia pessoal,

 

Estou com um problema a respeito do ''IF...ELSE IF".

Depois de inserir os dados, o código sempre chega na condição do ''ELSE''.

Além deste problema, ele também não mostra o valor diário (medido em porcentagem) do nutriente requerido.

Se puderem executar o código, fiquem à vontade.

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


// Uso das funções para inserção de cabeçários e tabela
void imprime_bemvindo(void){
		printf("==============================================================\n");
		printf("========BEM-VINDO AO RNE - RÓTULO NUTRITIVO ELETRÔNICO========\n");
		printf("==============================================================\n");
	}

void inserir_dados(void){
        printf("=================INSERÇÃO DE DADOS==================\n");
}

void imprime_dados(void){
        printf("=======================IMPRESSÃO DE DADOS=======================\n");
}

void imprime_tabelanutritiva(void){
        printf("====================================================\n");
        printf("=======TABELA REFERENCIAL - QUANTIDADE MÁXIMA=======\n");
        printf("====================================================\n");
        printf("| Nutriente             || Quantidade Máxima       |\n");
        printf("|==================================================|\n");
        printf("| Proteínas             || 300 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Carboidratos          || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Lipídios              || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Gorduras Totais       || 100 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Gorduras Saturadas    || 150 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Sódio                 || 2400 miligramas         |\n");
        printf("|==================================================|\n");
        printf("| Ferro                 || 14 gramas               |\n");
        printf("|==================================================|\n");
        printf("| Cálcio                || 800 gramas              |\n");
        printf("|==================================================|\n");
        printf("| Energia               || 2000 calorias           |\n");
        printf("|==================================================|\n");
        printf("| Colesterol            || 30 gramas               |\n");
        printf("|==================================================|\n");
        printf("| Fibras                || 30 gramas               |\n");
        printf("|==================================================|\n");
}

void imprime_fichanutritiva(void){
        printf("=====================================================\n");
        printf("==================FICHA NUTRITIVA====================\n");
        printf("=====================================================\n");
}

void imprime_diagnutritivo(void){
        printf("=====================================================\n");
        printf("================DIAGNÓSTICO NUTRITIVO================\n");
        printf("=====================================================\n");
}



//*Função principal do programa*
// Atribuição e inserção de dados
int main(){
	setlocale(LC_ALL, "Portuguese");

	// Definição
    const float maxproteina=150, maxlipidios=150, maxcarboidratros=150, maxenergia=2000, maxgordurasT=100;
    const float maxgordurasS=25, maxcolesterol=150, maxfibra=30, maxcalcio=800, maxferro=14, maxsodio=2400;

    // Variação
	char nome_nutriente[11][50];
	float maxnutriente[11], quant_nutriente[11], valor_diario[11];
	float proteinas, lipidios, carboidratos, energia, gordurasT, gordurasS, colesterol, fibra, ferro, sodio, calcio;
	float vdproteinas, vdlipidios, vdcarboidratos, vdenergia, vdgordurasT, vdgordurasS, vdcolesterol, vdfibra, vdferro, vdsodio, vdcalcio;
    int resposta;
    int i = 0;
    int opcao = 0;

	// Estrutura do Programa
	//- Deve inserir os dados de cada nutriente, incluindo a quantidade máxima deste elemento.
	imprime_bemvindo();
	imprime_tabelanutritiva();
	printf("\n");
	inserir_dados();
	for(i=1;i<5;i++){
                printf("Digite o %iº nutriente: ", i);
                setbuf(stdin, NULL);
                scanf("%49[^\n]s", nome_nutriente[i]);

                printf("Digite a quantidade máxima de %s: ", nome_nutriente[i]);
                scanf("%f", &maxnutriente[i]);

                printf("Digite a quantidade apresentada de %s : ", nome_nutriente[i]);
                scanf("%f", &quant_nutriente[i]);

                valor_diario[i] = ((quant_nutriente[i]/maxnutriente[i])*100);
                printf("\n");
	}

    system("cls");
	system("Color A");

    // Impressão de dados
    imprime_dados();
    printf("\n");
    imprime_fichanutritiva();

    for(i=1;i<5;i++){
            printf("| Nutriente: %s. || Valor diário do nutriente (porc.): %.1f.\n", nome_nutriente[i], valor_diario[i]);
            printf("=====================================================\n");
        }

    printf("*Observações: para sódio = mg.\n");
    printf("\t      para energia = cal.\n");
    printf("\n\n\n");

    // Análise de quantidades e impressão do prontuário nutritivo
    //- Deve inserir o número da opção para realizar o diagnóstico, e, posteriormente, inserir a quantidade
    //presente no produto novamente.
    imprime_diagnutritivo();


    do{
        printf("Escolha uma das opções a seguir: \n");
        printf("[1] - Energia\n");
        printf("[2] - Gorduras e Colesterol\n");
        printf("[3] - Minerais e Fibra\n");
        printf("[4] - Sódio\n");
        printf("\n");
        scanf("%i", &opcao);


        switch(opcao){


            case 1: printf("Você escolheu a opção 1 - Energia\n\n");
                    printf("Digite novamente a quantidade de Energia (em cal): ");
                    scanf("%i", &energia);

                    vdenergia = ((energia/maxenergia)*100);
                    printf("\n");
                    printf("%.1f\n", vdenergia);


                    if (vdenergia >= 90){
                        printf("O(A) paciente obteve aumento do peso, ao consumir a quantidade acima do permitido.\n");
                        printf("Recomendação: é necessário que o(a) paciente realize exercícios físicos\n");
                        printf("a fim de reduzir para o peso ideal.\n\n");
                    }

                    else if ((vdenergia < 90) && (vdenergia >= 60)){
                        printf("O(A) paciente não apresenta ganho ou perda de peso.\n\n");
                    }

                    else {
                        printf("O(A) paciente obteve diminuição do peso, ao consumir a quantidade abaixo do permitido.\n");
                        printf("Recomendação: é necessário que o paciente se alimente de nutrientes ricos em carboidratos\n");
                        printf("para alcançar ao peso ideal. \n\n");
                    }
                    break;
                    printf("\n");




            case 2: printf("Você escolheu a opção 2 - Gorduras e Colesterol\n\n");
                    printf("Digite novamente a quantidade de Gorduras Totais (em g): ");
                    scanf("%i", &gordurasT);
                    printf("Digite novamente a quantidade de Gorduras Saturadas (em g): ");
                    scanf("%i", &gordurasS);
                    printf("Digite novamente a quantidade de Colesterol (em g): ");
                    scanf("%i", &colesterol);

                    vdgordurasT = ((gordurasT/maxgordurasT)*100);
                    vdgordurasS = ((gordurasS/maxgordurasS)*100);
                    vdcolesterol = ((colesterol/maxcolesterol)*100);
                    printf("\n");
                    printf("%.1f\n", vdgordurasT);
                    printf("%.1f\n", vdgordurasS);
                    printf("%.1f\n", vdcolesterol);


                    if ((vdgordurasT >= 90) || (vdgordurasS >= 90) || (colesterol >= 90)){
                        printf("O(A) paciente apresenta quantidades diárias dos nutrientes acima da média.\n");
                        printf("Quando ultrapassar, pode ocasionar uma série de sintomas, devido ao excesso de nutrientes, \n");
                        printf("como problemas cardíacos, entupimento das veias, ou\n");
                        printf("uma possível parada cardíaca.\n");
                        printf("Recomendação: É necessário que o(a) paciente realize atividades físicas \n");
                        printf("para reduzir as quantidades de alimento consumidas.\n\n");
                    }

                    else if((vdgordurasT < 90) && (vdgordurasT >= 60) || (vdgordurasS < 90) && (vdgordurasS >= 60) || (colesterol < 90) && (colesterol >= 60)) {
                        printf("O(A) paciente não deve apresentar quantidades diárias dos nutrientes dentro do valor permitido.\n");
                    }

                    else {
                        printf("O(A) paciente apresenta quantidades diárias dos nutrientes abaixo da média. \n");
                        printf("Quando for inferior em relação à média, pode ocasionar uma série de sintomas de carência nutricional, \n");
                        printf("como oxidação de carboidratos, exaustão precoce e carência de vitaminas lipossolúveis (A,D,E e K). \n");
                        printf("Recomendação: É necessário consumir alimentos que contenham \n");
                        printf("gorduras poli-insaturadas, como salmão, e/ou monoinsaturadas, como nozes, castanhas, amêndoas. \n\n");
                    }
                    break;
                    printf("\n");




            case 3: printf("Você escolheu a opção 3 - Minerais e Fibra\n\n");
                    printf("Digite novamente a quantidade de Ferro (em g): ");
                    scanf("%i", &ferro);
                    printf("Digite novamente a quantidade de Cálcio (em g): ");
                    scanf("%i", &calcio);
                    printf("Digite novamente a quantidade de Fibras (em g): ");
                    scanf("%i", &fibra);

                    vdferro = ((ferro/maxferro)*100);
                    vdcalcio = ((calcio/maxcalcio)*100);
                    vdfibra = ((fibra/maxfibra)*100);
                    printf("\n");
                    printf("%.1f\n", vdferro);
                    printf("%.1f\n", vdcalcio);
                    printf("%.1f\n", vdfibra);


                    if ((vdferro >= 90) && (vdcalcio >= 90) && (vdfibra >= 90)){
                        printf("O(A) paciente pode apresentar uma quantidade de nutrientes acima da média. \n");
                        printf("O aumento da quantidade diária destes nutrientes, pode ocasionar \n\n");
                        printf("sintomas de excesso nutricional, como cansaço, dor no estômago fraquezas (para ferro), interferência\n");
                        printf("no funcionamento do coração e do cérebro (para cálcio), e/ou déficit de minerais \n");
                        printf("e bloqueio intestinal (para fibras).\n");
                    }

                    else if ((vdferro < 90) && (vdferro >= 60) || (vdcalcio < 90) && (vdcalcio >= 60) || (vdfibra < 90) && (vdfibra >= 60)){
                        printf("O(A) paciente apresenta uma quantidade de nutrientes dentro do solicitado. \n");
                        printf("O(A) paciente não deve apresentar problemas nutricionais\n\n.");
                    }

                    else {
                        printf("O(A) paciente pode apresentar uma quantidade de nutrientes abaixo da média. \n");
                        printf("A redução da quantidade de nutrientes consumida, pode ocasionar \n");
                        printf("sintomas de carência nutricional, como anemia, ospteoporose e constipação.\n\n");
                    }
                    break;
                    printf("\n");




            case 4: printf("Você escolheu a opção 4 - Sódio\n\n");
                    printf("Digite novamente a quantidade de Sódio (em mg): ");
                    scanf("%i", &sodio);

                    vdsodio = ((sodio/maxsodio)*100);
                    printf("\n");
                    printf("%.1f\n", vdsodio);


                    if (vdsodio >= 90){
                        printf("O(A) paciente pode apresentar pressão alta - excesso na quantidade de sódio ingerida no organismo.\n");
                        printf("Recomedação: O(A) paciente deve consumir quantidades menores do elemento.\n");
                        printf("Deve também consumir líquidos. Exemplo: água.\n\n");
                    }

                    else if ((vdsodio < 90) && (vdsodio >= 60)){
                        printf("O(A) paciente não deve apresentar nenhum problema de saúde em função da quantidade diária ingerida de sódio.\n");
                        printf("Recomendação: O(A) paciente deve manter a quantidade de sódio consumida.\n\n");
                    }

                    else {
                        printf("O(A) paciente pode apresentar pressão baixa - carência de sódio ingerida no organismo.\n");
                        printf("Recomendação: O paciente deve consumir uma quantidade mínima do elemento.\n\n");
                    }
                    break;
                    printf("\n");




            default: printf("Opção inválida.\n");
                     printf("\n\n");


        }
        printf("Gostaria de inserir outra opção? [0/1]\n");
        printf("\n");
        scanf("%i", &resposta);

    }while (resposta == 1);

    system("cls");
    system("Color C");
    printf("Obrigado por usar o RNE\n");
    printf("Finalizando o programa. . . . . .\n");



    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@NhemonF Eu não conseguir entender muito bem como o seu código funciona, mas nessa parte aqui

2 horas atrás, NhemonF disse:

else if ((vdenergia < 90) && (vdenergia >= 60))

se você quiser checar uma faixa entre 60...90 e melhor fazer assim

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


int main()
{
  int n1;
  printf("\nDigite um numero entre 1..5.\n\t");
  scanf("%i",&n1);
  if(n1>=1&&n1<=5)
    printf("\n\nEstá na faixa.\n");
  else
    printf("\n\nEstá fora de faixa");
  getchar();
  return(0);
}

sempre colocar "Maior ou igual á" ou "Menor ou igual á", por quê desta maneira você estaria checando se vdenergia e menor do que 90 então se for igual a 90 não vai executar.

 

2 horas atrás, NhemonF disse:

else if ((vdferro < 90) && (vdferro >= 60) || (vdcalcio < 90) && (vdcalcio >= 60) || (vdfibra < 90) && (vdfibra >= 60))

nessa parte você deve agrupar as instruções da maneira que você queira que sejam executadas.

else if((vdferro<90&&vdferro>=60)||(vdcalcio<90&&vdcalcio>=60)||(vdfibra<90&&vdfibra >= 60))

Outra coisa muito importante e indente o código para que cada seção fique legível.

2 horas atrás, NhemonF disse:

#include <conio.h>

conio e da era msdos então não é suportado por praticamente nenhum sistema moderno para substituir a GNU fez a ncurses, para usar conio você tem que usar Borland c compiler e as versões mais recentes não suportam mais a conio.

 

2 horas atrás, NhemonF disse:

#include <locale.h>

locale também não faz nada se o console não tem suporte para escrever no idioma especificado.

  • Curtir 1

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

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!