Função booleana em C

Boa tarde, preciso fazer um algoritmo onde eu insiro um valor inteiro e uma função booleana verifica se ele é par ou impar, mas quando eu compilo ele da erro após inserir o valor para verificação, se puderem me dar umas dicas para trabalhar com variaveis booleanas, agradeço desde ja!!!

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>


bool par_impar(int num1){
	bool t = true;
	if(num1%2==1){
		t = false;
	}
	return t;
}
main(){
	int num; 
	bool a;
	printf("Informe um valor: \n");
	scanf("%i", num);
	
	a = par_impar(num);
	
	if(a==true){
		printf("O numero %i e par!", num);
	}
	else{
		printf("O numero %i e impar!", num);
	}
	
}
1 curtida

O problema é que você está passando a cópia do valor da variável num, e
o argumento de scanf deve receber seu endereço.

Em:

scanf("%i", num);

troque por:

scanf("%i", &num);

o/

1 curtida

Nossa, um coisinha simples, muito obrigado, tirando isso a função que eu fiz esta correta?

1 curtida

Certo aparentemente está, porém está confuso e com algumas coisas desnecessárias.

O que par_impar quer responder? Se o número é par? Ou, se ele é ímpar? Não seria melhor usar algo mais direto como eh_par, ou eh_impar?

Simplificações

Tomando como base que você renomeou a sua função para eh_impar.

  1. Na sua função você poderia fazer apenas:

bool eh_impar(int num1) { return num1 % 2; }

O tipo bool é um açucar sintático para int. Assim, false na verdade é 0 e
true é qualquer coisa que não seja zero, e 1 se aplica.

Assim, se a expressão retorna 0 então vira false e se retorna 1 vira true.

Se você quiser renomear como eh_par então a lógica é o oposto.

bool eh_par(int num1) { return !(num1 % 2); }

Note o operador de negação “!”.

  1. No main, poderia ser apenas:

main() { int num; printf("Informe um valor: "); scanf("%i", &num); if (is_impar(num)) { printf("O número %i e impar!\n", num); } else { printf("O número %i e impar!\n", num); }

Eu não consegui deixar o código formatado de jeito nenhum. Então não note isso.

o/

1 curtida

Obrigado saulo, acredito que essas suas dicas vão me economizar umas boas linhas de códigos. Pra fazer uma verificação do valor que retorna na função eu preciso necessariamente atribuir a função a uma variavel, ou posso comparar a função direto?

1 curtida

Você pode comparar direto, como fiz no if dentro do main. Olhe:

> if ( is_impar(num) ) { > // ... >}

Isso diz que se qualquer valor retornado por is_impar for diferente de zero, então num é ímpar e o programa entra no escopo do if. Ou seja, não precisa atribuir a nada que irá funcionar.

Lembre do que disse anteriormente, qualquer valor diferente de zero é true.

Qualquer inteiro dentro de parênteses se torna uma expressão booleana.

Veja alguns exemplos:

> if (0) { > // nunca serei executado > }

if (1) {
// sempre serei executado
}

if (32849) {
// sempre serei executado
}

while (1) {
// sou um laço infinito, sempre executarei a menos
// que alguém declare break dentro de mim.
}

o/

1 curtida

Opa, sou iniciante em programação e me corrija se eu estiver errado, mas não seria mais fácil verificar

Bloco de citação

diretamente se o valor é par ou ímpar, sem precisar de função.

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

int main (){
int num;

printf("Digite um numero: ");
scanf("%d", &num);

if ((num % 2) == 0){
printf("O numero e par");
} else {
	printf("O numero e impar");
}

return (0);

}

1 curtida

EU pensei assim tambem

realmente assim fica muito mais facil e bem mais simples mais creio que ele queria testar em bool. seu programa está corretíssimo

acho que ele só queria testar o bool por que tem modos mais faceis de resolver isso:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main (){
int num;
setlocale(LC_ALL,“portuguese”);

printf("Digite um numero: ");
scanf("%d", &num);

if ((num % 2) == 0){
printf("O numero e par");
} else {
	printf("O numero e impar");
}

return (0);

}

mais acho que ele só queria testar bool mesmo