Estaba escribiendo una aplicación de consola que trataría de "adivinar" un número por prueba y error, funcionó bien y todo eso me dejó preguntándome sobre cierta parte que yo escribió distraídamente,?: Comportamiento del operador condicional ternario al dejar una expresión vacía
el código es:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,i,a,cc;
for(;;){
scanf("%d",&x);
a=50;
i=100/a;
for(cc=0;;cc++)
{
if(x<a)
{
printf("%d was too big\n",a);
a=a-((100/(i<<=1))?:1);
}
else if (x>a)
{
printf("%d was too small\n",a);
a=a+((100/(i<<=1))?:1);
}
else
{
printf("%d was the right number\n-----------------%d---------------------\n",a,cc);
break;
}
}
}
return 0;
}
Más concretamente la parte que me confunde es
a=a+((100/(i<<=1))?:1);
//Code, code
a=a-((100/(i<<=1))?:1);
he usado para hacer su ((100/(i<<=1))?:1)
re que si 100/(i<<=1)
devolviera 0 (o falso) la expresión completa evaluaría a 1 ((100/(i<<=1))?:***1***)
, y dejé la parte del condicional que funcionaría si fuera verdadera ((100/(i<<=1))? _this space_ :1)
vacía, parece funcionar correctamente pero ¿hay algún riesgo al dejar eso? parte del condicional vacío?
Este tipo de condicional se denomina operación ternaria. Puede obtener una mejor respuesta si vuelve a etiquetar o volver a titular su publicación para incluir 'ternario'. –
@Segphault: se llama * el * operador condicional (en C). Es un ejemplo de * a * operador ternario que es un término genérico que significa cualquier operador con tres operandos. – JeremyP
Si tiene dudas, que conducen a esta pregunta, no hay duda de que debería haber hecho explícita la asignación de casos verdaderos. TooBored .... Considera no codificar los juegos de consola tontos, porque es un retroalimentador de aburrimiento positivo. – jpinto3912