-
-
Save phaya/531bd1b4b1b730262cea to your computer and use it in GitHub Desktop.
Otro bocado que ha surgido de dudas de clase. El siguiente programa pretende comprobar si m es igual a alguno de los números listados, y en caso que la condición sea verdadera imprimir m. Como podéis comprobar funciona, o ¿no? ¿en qué casos falla y por qué?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
int main() | |
{ | |
int m = 7; | |
if (m == 1, 3, 5, 7, 8, 10, 12) { | |
printf("m = %d\n", m); | |
} | |
} |
No es exactamente así como funciona. Hay que tener en cuenta que la ,
es un operador binario en C al igual por ejemplo, que la suma. Evalúa el primer operando, descartando el resultado, y luego evalúa el segundo operando devolviendo su valor. Por ejemplo, si tienes int i=1
y la siguiente sentencia a = (i++, 5)
, el resultado es que en a
se guarda 5, e i
pasa a valer 2 (nótese los paréntesis dado que la ,
tiene una precedencia menor que la asignación). Con esta información, ¿serías capaces de explicar que está pasando?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Lo que está dentro del if equivale a escribir m==1, 1!=0, 3!=0, 5!=0, 7!=0, 8!=0, 10!=0, 12!=0
He estado probando y no se exactamente por qué, pero el if, al estar separada por comas, se evalúa como verdadero si la última condición es cierta, y se evalúa como falso si la última condición es falsa.