Jump to content
Fórum Script Brasil
  • 0

Ajuda a identificar o problema!!


rodolf0

Question

Boa noite pessoal. Sou iniciante em C, comecei a faculdade esse semestre. Enfim, estou querendo criar um codigo simples para calculo do IMC. É exigido que se peçam dados para o usuario, nome, idade, sexo, etc.... e depois imprima na tela os mesmos dados com o resultado do IMC. A dor de cabeça que estou tendo é na hora de imprimir o nome do usuario, a função não esta "puxando" o nome digitado e imprimindo na tela. Por favor, algume me ajuda a identificar qual o problema!!!! Se tiver qualquer outro erro, me ajudem pfvr! Brigadão

 

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

int main ()

{
setlocale (LC_ALL, "Portuguese");

char nome[10], sex, m, f;
int idade, doador;
float altura, peso, imc;


        printf("\nDigite seu nome:\n");
            fflush (stdin);
            gets(nome);

        printf ("\nIdade:\n");
            scanf ("%d", &idade);

        printf ("\nSexo (m ou f):\n");
            scanf ("%s", &sex);

        printf ("\nDoador: (0 - não ; 1 - sim)\n");
            scanf ("%d", &doador);

        printf ("\nAltura:\n");
            scanf ("%f", &altura);

        printf ("\nPeso:\n");
            scanf ("%f", &peso);

printf ("\t\t\t\t\t\t\t\t\t\t\t\t\ RESULTADO DA ANÁLISE\n");
//Comparações de sexo,doador e idade
{
if (sex == 'f')
    printf ("\nSra. %s \n", nome);
else if (sex == 'm')
    printf ("\nSr. %s\n", nome);

if (idade >= 60)
    printf ("\nPor favor, venha pela fila preferencial\n");
else if (idade < 60)
    printf ("\nLamento, você ainda não tem direito a fila preferencial.\n");
if (doador == 0)
    printf ("\nConvidamos você a ser um doador(a)!\n");
else if (doador == 1)
    printf ("\nParabéns por ser um doador(a) de sangue!\n");
}
//Cálculo de IMC e instruções de comparação
    imc = peso/(pow(altura,2));

if (imc < 17){
    printf ("\nAtenção, você está muito abaixo do peso, seu IMC é %.2f\n", imc);
}

if (imc >= 17 && imc <= 18.49){
    printf ("\nVocê está abaixo do peso, seu IMC é %.2f\n", imc);
}
if (imc >= 18.5 && imc <= 24.99){
    printf ("\nVocês está no peso normal, seu IMC é %.2f\n", imc);
}
if (imc >= 25 && imc <= 29.99){
    printf ("\nVocê está acima do peso, seu IMC é %.2f\n", imc);
}
if (imc >= 30 && imc <= 34.99){
    printf ("\nAtenção, você tem Obesidade grau I, seu IMC é %.2f\n", imc);
}
if (imc >= 35 && imc <= 39.99){
    printf ("\nAtenção, você tem Obesidade grau II, seu IMC é %.2f\n", imc);
}
if (imc >= 40){
    printf ("\nAtenção, você tem Obesidade grau III, seu IMC é %.2f\n", imc);
}


return 0;
}
 

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Olá!

 

Olha sou iniciante em C, mas acho que posso ajudar . . .

 

Bom pelo que vi o seu código parece estar funcionando direito, mas tenho algumas observações a fazer . . .

 

- Os 2 alertas estão lhe alertando para o fato de você ter declarado, mas não utilizado as variáveis “f” e “m”

 

|11|warning: unused variable ‘f’ [-Wunused-variable]|

 

|11|warning: unused variable ‘m’ [-Wunused-variable]|

 

 

- O alerta abaixo está lhe alertando para o fato de que a função gets(), é perigosa, pois possui algumas características de funcionamento que fazem com que o seu uso seja desaconselhável., tente utilizar outras funções.

 

|20|warning: ‘gets’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]|

 

- Se o problema continuar tente eliminar a função fflush(stdin);

 

Obs.: para a sua variavel "sex" neste caso se não me engano o mais apropriado seria utilizar o codigo de formatação "%c" especifico para a entrada de caracteres.

 

 

Bom por hora é só . . . veja se as dicas acima lhe ajudam em algo . . .

 

Ubuntu 14.04  GCC 4.8  CodeBlocks 13.12

 

Espero Ter Ajudado ! ! !

Edited by Felipe222
Link to comment
Share on other sites

  • 0

Ok, retirei as duas variáveis inutilizadas. Qual seria a outra função no lugar de gets para capturar strings? Outra coisa, quando eu coloco "%c" no string de SEX, ao rodar o programa ele "pula" a pergunta do sexo, passando direto para a pergunta se é doador. Além disso a duvida inicial permanece, o nome não aparece quando o programa roda, ao colocar os dados do usuario e as outras informações.

Link to comment
Share on other sites

  • 0

Aparte de toda a ajuda que já lhe ofereceu acho que você está tendo problemas com lixo na memoria, fflush é uma solução meio mequetrefe de arrumar o problema.
 

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

int main () {

    char nome[10], sex;
    int idade, doador;
    float altura, peso, imc;
    
    
    printf ( "\nDigite seu nome:\n" );
    scanf ( "%9[^\n]%*c", nome );
    
    printf ( "\nIdade:\n" );
    scanf ( "%d%*c", &idade );
    
    printf ( "\nSexo (m ou f):\n" );
    scanf ( "%c%*c", &sex );
    
    printf ( "\nDoador: (0 - não ; 1 - sim)\n" );
    scanf ( "%d%*c", &doador );
    
    printf ( "\nAltura:\n" );
    scanf ( "%f%*c", &altura );
    
    printf ( "\nPeso:\n" );
    scanf ( "%f%*c", &peso );
    
    printf ( "RESULTADO DA ANÁLISE\n" );
    //Comparações de sexo,doador e idade
    
    if ( sex == 'f' )
        printf ( "\nSra. %s \n", nome );
    else if ( sex == 'm' )
        printf ( "\nSr. %s\n", nome );
        
    if ( idade >= 60 )
        printf ( "\nPor favor, venha pela fila preferencial\n" );
    else if ( idade < 60 )
        printf ( "\nLamento, você ainda não tem direito a fila preferencial.\n" );
        
    if ( doador == 0 )
        printf ( "\nConvidamos você a ser um doador(a)!\n" );
    else if ( doador == 1 )
        printf ( "\nParabéns por ser um doador(a) de sangue!\n" );
        
    //Cálculo de IMC e instruções de comparação
    imc = peso / ( pow ( altura, 2 ) );
    
    if ( imc < 17 ) {
        printf ( "\nAtenção, você está muito abaixo do peso, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 17 && imc <= 18.49 ) {
        printf ( "\nVocê está abaixo do peso, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 18.5 && imc <= 24.99 ) {
        printf ( "\nVocês está no peso normal, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 25 && imc <= 29.99 ) {
        printf ( "\nVocê está acima do peso, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 30 && imc <= 34.99 ) {
        printf ( "\nAtenção, você tem Obesidade grau I, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 35 && imc <= 39.99 ) {
        printf ( "\nAtenção, você tem Obesidade grau II, seu IMC é %.2f\n", imc );
    }
    
    if ( imc >= 40 ) {
        printf ( "\nAtenção, você tem Obesidade grau III, seu IMC é %.2f\n", imc );
    }
    
    
    return 0;
}

Para entender o problema lhe recomendo você visitar e dedicar um tempo em ler este tema completamente que vou lhe postar a continuação, incluindo as respostas dos usuarios, isso vai lhe aclarar por que não devemos usar fflush para purgar a entrada padrão de C, e lhe oferece varias alternativas para esse cometido.
http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      651.8k
×
×
  • Create New...