Typedef para el valor lógico

A ver si consigo que me entiendas la pregunta:
Resulta que todos sabemos que el C no tiene el tipo "logico" pero eso se puede solucionar haciendo un "typedef enum {cierto, falso} lógico", ¿verdad?
Bien, pongamos el ejemplo más sencillo que pueda existir:
"un a función que devuelva 'cierto' si un nº es par y falso si es impar". Eso es muy fácil. Pero el problema es que devuelve: "1" para cierto y "0" para falso, y lo que yo quiero es que devuelva las palabras "cierto" o "falso", ¿se entiende la pregunta?. Preguntando en clase, me dijeron que eso se puede resolver con un simple "if", y la verdad, no me imagino cómo puede hacerse eso con un if, ¿alguna sugerencia?

1 respuesta

Respuesta
1
Las enumeraciones contienen expresiones a las que se les autoasigna un numero entero, es por ello que no puede contener cadenas de caracteres.
Otra cosa, la directriz typedef tiene como finalidad definir un sinónimo a un tipo determinado. Por ejemplo:
typedef int entero;
con esto a partir de ahora podriamos de finir variables asi:
entero num=5; //entero es sinonimo de int
para definir una enumeracion hariamos algo asi:
enum t_colores{rojo,verde,azul};
ahora tenemos un tipo denominado enum t_colores. Y para definir una variable de este tipo seria:
enum t_colores MiColor = rojo;
Se usa la directriz typedef para no tener que poner "enum t_colores". Se crea un sinónimo de ese tipo. Así:
typedef enum t_colores{rojo,verde,azul} tColor;
y ahora para definir una variable bastaria con hacer:
tColor MiColor=rojo;
A otra cosa. Para que tu función impar devuelva una cadena de caracteres ("cierto" y "falso" son cadenas de caracteres) debería tener una declaración de esta forma (o similar):
char * impar(int n);
podrias hacer:
typedef char * logico;
y la declaracion seria:
logico impar (int n);
Para lo del if, t paso este pekeño ejemplo. Si no entiendes algo, no dudes en consultarme
#include <stdio.h>
Typedef char * logico; //asignamos el tipo char * a nuestro tipo
//ahora 'logico' es sinonimo de 'char *'
logico valores[2]={"falso","cierto"}; //definimos un array de 2 cadenas
//inicializadas a "cierto" y "falso"
logico impar(int); //definimos la funcion impar q devuelve
//un tipo logico (realmente char *)
void main ()
{
int num=1;
printf("Pulsa 0 para salir\n\n");
while(num) //mientras num sea distinto de 0
{
printf ("Numero: ");
scanf("%d",&num);
printf("\t%s\n",impar(num)); //imprimimos la cadena devuelta
}
}
logico impar (int n)
{
return (n%2)? valores[1]: valores[0]; //operador ternario
}
/* la función impar usando if
logico impar (int n)
{
if (n%2==1) return valores[0];
else return valores[1];
}
*/
Raguin, macho eres un máquina. Ni mi profesor me lo hubiera explicado mejor. Te mereces el "excelente" porque seguro que habrás estado más de media hora para contestarme esto.
Te lo has currado, si señor, sigue así.
Y muchas gracias, duda aclarada :D .

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas