¿Qué significa poner ? dentro de un printf en c?
El operador ternario es una abreviación de la sentencia if-else
.
Por ejemplo, tu código sería equivalente a esto:
int main(void)
{
char cadena[TAM];
printf("\nIntroduce la palabra\n");
gets(cadena);
if(Palindroma(cadena))//Esto es equivalente a Palindroma(cadena) != 0
{
printf("La palabra: %s es palindroma.\n", cadena);
}
else
{
printf("La palabra: %s no es palindroma.\n", cadena);
}
return 0;
}
En estos casos se suele usar el operador ternario para ahorrarnos unas cuantas líneas.
También hay otra forma de escribir tu código con el operador ternario:
int main(void)
{
char cadena[TAM];
printf("\nIntroduce la palabra\n");
gets(cadena);
//Si la función retorna 1, le pasa al parámetro de printf la primera cadena, de lo contrario, pasa la segunda.
printf((Palindroma(cadena) ? ("La palabra %s es palindroma") : ("La palabra %s no es palindroma")), cadena);
return 0;
}
Si te das cuenta, los dos códigos que he escrito, hacen exactamente lo mismo.
Por último, no uses la función gets
para leer cadenas, esto puede ocasionar desbordamiento de búfer o incluso bloquear tu programa (para más información: Por qué no debemos utilizar gets()).
En su lugar, usa fgets
, esta función si permite agregar el tamaño del búfer y evita el posible desbordamiento.
int main(void)
{
char cadena[TAM];
printf("\nIntroduce la palabra\n");
//sizeof devuelve el tamaño del arreglo cadena
fgets(cadena, sizeof cadena, stdin);
printf("La palabra: %s %s palindroma.\n",cadena, (Palindroma(cadena)) ? "es" : "no es");
return 0;
}