Cuando vimos la orden “for”, siempre usábamos una única variable como contador, pero esto no tiene por qué ser siempre así. Vamos a verlo con un ejemplo:
/*---------------------------*/
/* Ejemplo en C nº 100: */
/* c100.c */
/* */
/* Operador coma (1) */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
int main(){
int i, j;
for (i=0,j=1; i<=5, j<=30; i++, j+=2)
printf("i vale %d y j vale %d.\n", i, j);
return 0;
}
Vamos a ver qué hace este "for":
* Los valores iniciales son i=0, j=1.
* Se repetirá mientras que i <= 5, j <= 30.
* Al final de cada paso, i aumenta en una unidad, y j en dos unidades.
El único problema está en saber cúando terminará el bucle: si se parará en cuanto se cumpla una de las dos condiciones o si tendrán que cumplirse las dos.
El resultado de este programa servirá como respuesta:
i vale 0 y j vale 1.
i vale 1 y j vale 3.
i vale 2 y j vale 5.
i vale 3 y j vale 7.
i vale 4 y j vale 9.
i vale 5 y j vale 11.
i vale 6 y j vale 13.
i vale 7 y j vale 15.
i vale 8 y j vale 17.
i vale 9 y j vale 19.
i vale 10 y j vale 21.
i vale 11 y j vale 23.
i vale 12 y j vale 25.
i vale 13 y j vale 27.
i vale 14 y j vale 29.
Como podemos observar, llega un momento en que deja de cumplise que i<=5, pero el programa sigue avanzando: no se sale del bucle “for” hasta que se cumplen las dos condiciones (realmente, hasta que se cumple la segunda).
La idea es que, en general, si se usa el operador coma para separar dos expresiones, nuestro compilador evalúa la primera expresión, luego la segunda, y devuelve como valor el resultado de la segunda. Veámoslo con un segundo ejemplo algo más rebuscado
/*---------------------------*/
/* Ejemplo en C nº 101: */
/* c101.c */
/* */
/* Operador coma (2) */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/
#include
int main(){
int i, j, k;
k = ((i=5), (j=6));
printf("i=%d, j=%d, k=%d", i, j, k);
return 0;
}
Aun así, en la práctica, el único uso habitual del operador coma es el primero que hemos visto: utilizar dos condiciones simultáneas para controlar un bucle “for”.