int main() {
int a = 1;
int b = 0;
if (a = b || ++a == 2)
printf("T: a=%i, b=%i", a, b);
else
printf("F: a=%i, b=%i", a, b);
return 0;
}
Echemos un vistazo a este fragmento de código simple. El resultado es: T: a = 1, b = 0¿Por qué se resuelve este código como verdadero?
¿Por qué? (Nota a=b
utiliza la asignación de operando, no comparación)
Lo que entiendo aquí, es que cero se asigna a un , a continuación, se incrementa un a 1. 1 no es igual a 2. Así resultado debe de hecho, sea a = 1, b = 0. Pero, ¿por qué se evalúa esta condición como verdadera? Ninguno de (a=b)
o (++a == 2)
es cierto ... ¿Qué extrañé?
Aquí es otro programa corto que imprime F como se esperaba:
int main() {
int a = 1;
int b = 0;
if (a = b) printf("T"); else printf("F");
return 0;
}
Si cambia su || condiciones que probablemente evaluaría como falso como esperabas. –
Oh, lo siento, no es un duplicado. Mi error. –
@ M.Babcock sí, pero ¿por qué no? – Xorty