Comprender un bucle for particular

Así que ayer estuve investigando C ++; mirando un código de ejemplo y tratando de sentir las cosas. Yo vi esto:

for (bool b = true; b; )
{
    b = true;
    //Other stuff.
}

Me hace sentir estúpido porque es la primera vez que veo un bucle for usado de esta manera. Básicamente, ¿qué está diciendo esto? ¿Cuál sería un ciclo while equivalente?

preguntado el 27 de agosto de 11 a las 21:08

esa es una forma verdaderamente extraña de expresar eso. -

Ew, eso fue en ejemplo ¿código? -

El b = verdadero entre llaves no hace nada; solo se llama para establecer b en verdadero cuando b es verdadero -

2 Respuestas

Es lo mismo que:

bool b = true; // 1

while(b) // 2
{
    b = true;
    //Other stuff.
    // 3
}

Las 3 partes separadas por punto y coma de un bucle for siempre corresponden a los lugares que comenté en el bucle while.

Sin embargo, no lo considere una forma inteligente de guardar un par de líneas. Cualquiera que escriba un código como el que vio debería ser eliminado y fusilado.

Respondido 28 ago 11, 01:08

Gracias; Ahora me hago una idea. - Randolph Levant

Aprecio el sentimiento, pero no solo guarda un par de líneas, sino que también limita el alcance de la variable b. - hombre de hojalata

sí, @tinman tiene razón. Además, obtienes una imagen de cómo va a cambiar la variable del bucle en el bucle, en lugar de tener que mirar la parte superior e inferior del bucle. Incluso si hace que parezca más complicado. Por ejemplo for (int i, scanf("%d", &i); i; scanf("%d", &i)) {...} tiene mucho más sentido para mí que el while equivalente (aunque en este caso muy particular, escribiría: int i; while (scanf("%d", &i), i) {...}) - Shahbaz

Debo admitir que en la publicación anterior también quería mostrarle a @randolph levant que esas tres declaraciones podrían ser CUALQUIER declaración válida que podría colocarse en las ubicaciones 1, 2 y 3 como ha mencionado karl bielefeldt. Y por cualquiera me refiero a cualquiera. Por ejemplo esto: for (FILE *fin = fopen("some_file", "r"); network_is_working(); draw_statistics_graph()) {.../*maybe read from file, do something from network and save statistics*/...} - Shahbaz

@ jadarnel27: Su respuesta fue correcta, no quiero poner muchas respuestas para el OP que son básicamente todas iguales, solo confunden el OP. - Shahbaz

do
{
  b = true;
  // Other stuff
} while(b);

Respondido 28 ago 11, 01:08

Gracias; esto fue muy útil. - Randolph Levant

Está mal, un bucle for comprueba la condición antes hacer el cuerpo - Oso negro

@BlackBear Esto puede no ser equivalente al bucle for en general, pero según la información dada, es muy similar al bucle for dado. - Ajeet Ganga

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.