FORUM DARKERS

Tecnologia & Informática => Programação => C/C#/C++ => Topic started by: .RaR. on 22 de March , 2010, 09:17:11 PM

Title: Pequeno problema
Post by: .RaR. on 22 de March , 2010, 09:17:11 PM
Galera...estou com um problema aqui, o código executa direto não ta fazendo os cálculos corretamente, é uma dúvida simples, é que entrei em C a 2 dias e não to entendendo oque ta acontecendo.

Quote
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    char m;
    float altura,pesoideal;
    system("cls");
        printf("Escreva o sexo da pessoa (masculino ou feminino): ");
        scanf("%c",&m);
        printf("Entre com a altura da pessoa: ");
        scanf("%f",&altura);
    if( m == "masculino") {
        pesoideal = (72.7*altura)-58;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
        else
        {
        pesoideal = (62.1*altura)-44.7;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
    system("pause");
    return 0;
}
     
Title: Re:Pequeno problema
Post by: Σĸөsıҳ on 23 de March , 2010, 12:25:56 PM
 ???
Especifique melhor seu problema, por favor.
Title: Re:Pequeno problema
Post by: NetKiler on 23 de March , 2010, 03:17:51 PM
o erro é simples, a variavel M foi declarada como um unico char e vc esta tentando usa-la como string...

A linguagem C não possui nenhum tipo primitivo que permite a manipulação de Strings, porem podemos implementar uma string através do uso de um vetor de caracteres terminado pelo caracter nulo.
assim sendo seu codigo pode ser implementado de 2 maneiras

usando apenas M ou F como paramentro de entrada
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    char m;
    float altura,pesoideal;
    system("cls");
        printf("Escreva o sexo da pessoa (m ou f): "); //Usar apenas um caracter como parametro de entrada
        scanf("%c",&m);
        printf("Entre com a altura da pessoa: ");
        scanf("%f",&altura);
    if( m == 'm') { // fazer a comparação com apenas um caracter
        pesoideal = (72.7*altura)-58;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
        else
        {
        pesoideal = (62.1*altura)-44.7;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
    system("pause");
    return 0;
}

        else
        {
        pesoideal = (62.1*altura)-44.7;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
    system("pause");
    return 0;
}

Utilizando String (Vetor de char)
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //Adicionar a biblioteca string.h para manipular strings
int main (void)
{
    char m[10];
    float altura,pesoideal;
    system("cls");
        printf("Escreva o sexo da pessoa (masculino ou feminino): ");
        gets (m); // função usada para ler uma string
        printf("Entre com a altura da pessoa: ");
        scanf("%f",&altura);
    if ((strcmp(m,"masculino")) == 0) { //a função strcmp compara 2 strings e retorna 0 se forem iguais
        pesoideal = (72.7*altura)-58;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
        else
        {
        pesoideal = (62.1*altura)-44.7;
        printf("O peso ideal para esta pessoa e: %.2f\n",pesoideal);
        }
    system("pause");
    return 0;
}

Title: Re:Pequeno problema
Post by: VonNatur on 23 de March , 2010, 03:22:24 PM
considero mais eficiente usar:

scanf("%9[^\n]", m);

Para ler as strings do que usar o gets.

[]'s
Title: Re:Pequeno problema
Post by: d3lf0 on 23 de March , 2010, 04:12:44 PM
eu sei pra que serve o scanf.
scanf("%9[^\n]", m);
não entendi o sentido de %9[^\n]

se puder explicar, agradeço;

edit:

ja entendi como funciona:

pega nove caracteres menos o newline

te mais.
Title: Re:Pequeno problema
Post by: VonNatur on 28 de March , 2010, 09:21:34 AM
Vai pegar 9 caracteres até o new line(enter), e excelente para capturar strings compostas, sem ter usar o lixo do gets.

[]'s
Title: Re:Pequeno problema
Post by: .RaR. on 29 de March , 2010, 07:32:08 PM
Opa vlw NetKiler, funcionou perfeitamente, ainda não conhecia bem a biblioteca de caracteres, thx