Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda a identificar o problema!!


rodolf0

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

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

Editado por Felipe222
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...