• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ibuh

IF sem funcionar - IF alguem me pudesse ajudar!

6 mensagens neste tópico

Boa noite pessoal do P@P,

Gostava de saber se alguem me explicar porque é que o programa não me entra no ultimo IF.

#include<stdio.h>
#include<math.h>

void main()
{
int peso,racao,racao_adq,erro;

peso=1;


while (peso!=0){

printf("Insira o peso do animal (em kg): ");
scanf("%d",&peso);

printf("\nIntroduza a racao (em g): ");
scanf("%d",&racao);


if(0 <= peso <= 10)
{
racao_adq = 0.1 + 20 * peso;
printf("\nA racao adequada para o seu animal e de : %d g\n\n", racao_adq);
erro = racao - racao_adq;
printf("\nA racao que esta a dar ao seu animal difere em %d g .\n\n\n\n",erro);
}

else
{
if(10 < peso <= 25)
{
	racao_adq = 0.3 + 20 * peso;
	printf("\nA racao adequada para o seu animal e de: %d g\n\n", racao_adq);
	erro = racao - racao_adq;
	printf("\nA racao que esta a dar ao seu animal difere em %d g .\n\n\n\n",erro);
}
else
{
	if(25 < peso <= 45)
	{
		racao_adq = 0.4 + 20 * peso;
		printf("\nA racao adequada para o seu animal e de %d g\n\n", racao_adq);
		erro = racao - racao_adq;
		printf("\nA racao que esta a dar ao seu animal difere em %d g .\n\n\n\n",erro);

	}
	else
	{
		if (peso > 45)
		{
			racao_adq= 0.4 + 20 * peso;
			printf("\nA racao adequada para o seu animal e de %d g\n\n", racao_adq);
			erro = racao - racao_adq;
			printf("\nA racao que esta a dar ao seu animal difere em, %d g .\n\n\n\n",erro);
			printf("A sua racao n e adq");
		}
		else
		{
			printf("Racao adequada nao calculada");
		}
}}}}}

Ele deveria mostrar a mensagem "Racao nao calculada" antes de sair do programa, pois a racao so não é calculada quando o utilizador insere o valor 0. Este termina o programa e deveria mostrar essa mensagem. Porque não passa neste ultimo IF?

Antecipadamente Grato.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
$ gcc -Wall -Wextra -Wwrite-strings -std=c89 -pedantic ibuh.c

ibuh.c:5: warning: return type of ‘main’ is not ‘int’

ibuh.c: In function ‘main’:

ibuh.c:20: warning: comparisons like X<=Y<=Z do not have their mathematical meaning

ibuh.c:30: warning: comparisons like X<=Y<=Z do not have their mathematical meaning

ibuh.c:39: warning: comparisons like X<=Y<=Z do not have their mathematical meaning

$

Aumenta o nível de warnings do teu compilador ... e altera as linhas 5, 20, 30, e 39.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que é como quem diz, tens que separar condições tipo 0 <= peso <= 10 em algo como 0 <= peso && peso <= 10

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

if(0 <= peso <= 10)

Quando metes 0 ele executa o primeiro IF, pois o peso é maior OU IGUAL a zero.

Revê as condições dos Ifs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nem um Mod do fórum de C encontrou o problema (sim, é verdade que aquelas comparações não têm um significado matemático para o compilador) mas á parte disso, o problema residia no 1º IF, onde as condições estavam mal estruturadas.

Eu vi, e respondi. Mesmo após 2 anos... se vier cá outra pessoa com uma duvida semelhante, vai ser capaz de usar este tópico para resolver os seus problemas em vez de pensar que nem os Mods daqui conseguem resolver isso e ir para um fórum brasileiro ou algo que o valha.

Que eu saiba não infringi nenhuma regra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora