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

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

Bell Coutinho
BellCoutinho

(usa Arch Linux)

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.



  


2. MELHOR RESPOSTA

Hugo Cerqueira
hrcerq

(usa Outra)

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]

Bell Coutinho
BellCoutinho

(usa Arch Linux)

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








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts