Pequeno problema

Iniciado por .RaR., 22 de Março , 2010, 09:17:11 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

.RaR.

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.

Citar
#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;
}
     
Uma vírgula em um lugar errado, pode comprometer sua vida. by OneSr

Σĸөsıҳ

 ???
Especifique melhor seu problema, por favor.
from| PSY
_
Hygnus Software
_

NetKiler

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;
}


VonNatur

considero mais eficiente usar:

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

Para ler as strings do que usar o gets.

[]'s

d3lf0

#4
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.
c0d3rs
BotecoUnix

Windows makes Noise, Linux plays Music, but BSD ROCKSsss

VonNatur

Vai pegar 9 caracteres até o new line(enter), e excelente para capturar strings compostas, sem ter usar o lixo do gets.

[]'s

.RaR.

Opa vlw NetKiler, funcionou perfeitamente, ainda não conhecia bem a biblioteca de caracteres, thx
Uma vírgula em um lugar errado, pode comprometer sua vida. by OneSr