Ir ao conteúdo
  • Cadastre-se
NhemonF

C Erro ao executar o programa.

Posts recomendados

Bom, queria colocar vários nomes diferentes de nutrientes(ex: proteínas, carboidratos etc. etc).

Ao executar o programa, ele repete o último nome inserido no programa.

Outra coisa é que queria colocar porcentagens exatas de quantidades de cada nutriente. Mas eu queria só ó número inteiro (exemplo: se for dividir dois números e o resultado for real, eu quero que apareça o numero inteiro do resultado da divisão

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.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             || 150 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 caloria            |\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 int maxproteina=150, maxlipidios=150, maxcarboidratros=150, maxenergia=2000, maxgordurasT=100;
    const int maxgordurasS=25, maxcolesterol=150, maxfibra=30, maxcalcio=800, maxferro=14, maxsodio=2400;

    // Variação
	char nome_nutriente[20];
	int maxnutriente, quant_nutriente, i = 1, valor_diario;
	int proteinas, lipidios, carboidratos, energia, gordurasT, gordurasS, colesterol, fibra, ferro, sodio, calcio;
	int vdproteinas, vdlipidios, vdcarboidratos, vdenergia, vdgordurasT, vdgordurasS, vdcolesterol, vdfibra, vdferro, vdsodio, vdcalcio;
    int resposta;
    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);

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

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

		valor_diario = ((quant_nutriente/maxnutriente)*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.): %i.\n", nome_nutriente, valor_diario);
            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");


                    if (vdenergia >= 90){
                        printf("O(A) paciente obteve aumento do peso.\n");
                        printf("Recomendação: é necessário que o paciente realize exercícios físicos\n");
                        printf("a fim de diminuir 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.\n");
                        printf("Recomendação: é necessário que o paciente se alimente de nutrientes ricos em carboidratos\n");
                        printf("para chegar 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 Coelsterol (em g): ");
                    scanf("%i", &colesterol);

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


                    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 problemas de saúde, \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 apresenta quantidades diárias dos nutrientes dentro do valor permitido.\n");
                        printf("Ou seja, não apresenta problemas de saúde.\n\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 problemas de saúde, \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");


                    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 de nutrientes, pode ocasionar \n\n");
                        printf("problemas de saúde, como \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 apresentou 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("problemas de saúde, como anemia, ospteoporose, \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");


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

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

                    else {
                        printf("O(A) paciente pode apresentar pressão baixa - carência de sódio ingerida no corpo.\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");
    printf("Obrigado por usar o RNE\n");
    printf("Finalizando o programa. . . . . .\n");



    return 0;

}

).

Poderiam me ajudar com o programa. O programa executa, mas ele faz com que apareça estes erros.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode formatar a impressão de um número real, da seguinte forma:

// Número real, com duas casas após a vírgula
	printf("%.2f", var);

// Número real, sem casas após a vírgula
	printf("%.f", var);

Também é possível converter tipos, usando cast:

// declaração das variáveis
int a = 10;
float b;

// int para float
b = (float) a;

-----------------------------

1 hora atrás, NhemonF disse:

Ao executar o programa, ele repete o último nome inserido no programa.

 

 

Ok, vamos lá.

 

Você quer salvar várias proteínas diferentes, certo? Logo, você está salvando o nome, a quantidade máxima e a quantidade apresentada.

 

Infelizmente, você está fazendo isso tudo, em uma variável comum... Ou seja:

  • Você está armazenando esses dados, e parte pro próximo nutriente.
  • Neste próximo nutriente, você armazena os dados em cima dos dados do nutriente anterior!

Por isso o programa está exibindo somente os dados do último nutriente.

---

Para resolver isso, usamos vetores e matrizes. Isso permite o armazenamento de diferentes dados do mesmo tipo.

----

Quando você declarou a variável abaixo, estava declarando um VETOR DE CHAR, ou seja, a variável nome_nutriente, salva 20 caracteres, formando uma "palavra", diferente de uma variável char comum, que salva somente UM caractere.

char nome_nutriente[20];
	

Use esta lógica, para criar um vetor de inteiros, e salvar as quantidades máx. e apresentada!

int qtdMax[5], qtdApresentada[5];

 

Procure estudar VETORES (para salvar as diferentes quantidades) e MATRIZES (para salvar os diferentes nomes dos nutrientes).

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
17 horas atrás, GBMelkor disse:

// Número real, sem casas após a vírgula printf("%.f", var);

Por exemplo; se var= 9.5 a saída de var: 10.

  • 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!