Pular para o conteúdo

Ajuda: warning: comparison between pointer and integer [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. Ajuda: warning: comparison between pointer and integer [RESOLVIDO]

Enviado em 24/03/2018 - 11:00h

Pessoal eu estou tentando resolver a questão 13 da primeira lista de exercícios da Python Brasil em C.
A questão é a seguinte:
13 . endo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu peso ideal, utilizando as seguintes fórmulas:
a. Para homens: (72.7*h) - 58
b. Para mulheres: (62.1*h) - 44.7 (h = altura)
c. Peça o peso da pessoa e informe se ela está dentro, acima ou abaixo do peso.
Meu código:
#include <stdio.h>

int main(void) {

float altura, peso, peso_ideal;
char sexo;

printf("Informe sua altura: ");
scanf("%f", &altura);

printf("Informe seu peso: ");
scanf("%f", &peso);

printf("Informe o seu sexo: [M/F]");
scanf("%c", &sexo);

if (sexo == "m" || sexo == "m"){
if (sexo == "m"){

peso_ideal = (72.7 * altura) - 58;

if (peso > peso_ideal) {
printf("Com um peso de %.2f, você está acima do peso\n", peso);
}
else if (peso < peso_ideal) {
printf("Com um peso de %.2f, você está abaixo do peso\n", peso);
}
else{
printf("Com um peso de %.2f, você está no seu peso ideal. Parabéns!!!\n", peso);
}

}
else{
peso_ideal = (62.1 * altura) - 44.7;

if (peso > peso_ideal) {
printf("Com um peso de %.2f, você está acima do peso\n", peso);
}
else if (peso < peso_ideal) {
printf("Com um peso de %.2f, você está abaixo do peso\n", peso);
}
else{
printf("Com um peso de %.2f, você está no seu peso ideal. Parabéns!!!\n", peso);
}


}

}
else{
printf("Sexo inválido, por favor tente novamente\n");
}

return 0;
}
Quando uso o gcc para compilar aparece essa menssagem "warning: comparison between pointer and integer".
Como posso resolver esse problema?
OBS: Estou na minha 3 aula de C na universidade.

Desde já obrigado.

Responder tópico

2. Re: Ajuda: warning: comparison between pointer and integer [RESOLVIDO]

Melhor resposta

Enviado em 24/03/2018 - 16:24h

Caro colega,

O problema é que você está colocando os caracteres entre aspas duplas. Elas são usadas para strings, não para caracteres. Uma string é um vetor de caracteres, e portanto quando coloca aspas duplas está passando um ponteiro (pointer) para a primeira posição da string. Daí a mensagem falar de comparação entre ponteiro e valor inteiro (já que na prática um caracter é representado por um número).

A propósito, falando em representação numérica dos caracteres, é importante observar que o caracter 'm' (minúsculo) é representado por um valor diferente do caracter 'M' (maiúsculo). Você instrui o usuário a digitar M ou F, porém no bloco if você faz uma comparação com o caracter 'm'. Dessa forma o usuário provavelmente vai receber mensagens de sexo inválido. Além disso, no primeiro bloco if você compara o caracter duas vezes com 'm' em vez de 'M' ou 'F', o que significa que se a pessoa digitar 'f' também receberá mensagem de sexo inválido.

Por fim, a escrita na variável sexo do jeito que está vai falhar. Isso acontece porque scanf vai ler o primeiro caractere que encontrar no buffer de leitura (geralmente tem um caracter de fim de linha sobrando), que vai ser usado e aí o usuário não tem a chance de preencher esse valor. Para contornar o problema, coloque um espaço antes de %c, como a seguir:

scanf(" %c", &sexo); 
Isso vai fazer com que scanf ignore esse caracter de fim de linha e interprete o que o usuário digitar.

---

Atenciosamente,
Hugo Cerqueira

3. Re: Ajuda: warning: comparison between pointer and integer [RESOLVIDO]

Enviado em 08/04/2018 - 20:12h

hrcerq escreveu:

Caro colega,

O problema é que você está colocando os caracteres entre aspas duplas. Elas são usadas para strings, não para caracteres. Uma string é um vetor de caracteres, e portanto quando coloca aspas duplas está passando um ponteiro (pointer) para a primeira posição da string. Daí a mensagem falar de comparação entre ponteiro e valor inteiro (já que na prática um caracter é representado por um número).

A propósito, falando em representação numérica dos caracteres, é importante observar que o caracter 'm' (minúsculo) é representado por um valor diferente do caracter 'M' (maiúsculo). Você instrui o usuário a digitar M ou F, porém no bloco if você faz uma comparação com o caracter 'm'. Dessa forma o usuário provavelmente vai receber mensagens de sexo inválido. Além disso, no primeiro bloco if você compara o caracter duas vezes com 'm' em vez de 'M' ou 'F', o que significa que se a pessoa digitar 'f' também receberá mensagem de sexo inválido.

Por fim, a escrita na variável sexo do jeito que está vai falhar. Isso acontece porque scanf vai ler o primeiro caractere que encontrar no buffer de leitura (geralmente tem um caracter de fim de linha sobrando), que vai ser usado e aí o usuário não tem a chance de preencher esse valor. Para contornar o problema, coloque um espaço antes de %c, como a seguir:

scanf(" %c", &sexo); 


Isso vai fazer com que scanf ignore esse caracter de fim de linha e interprete o que o usuário digitar.

---

Atenciosamente,
Hugo Cerqueira
Muito obrigado me ajudou muito, tinha esquecido de marca como resolvida antes kkkk


Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder