Hola así que básicamente mi pregunta es, ¿qué hace un bucle sin ningún tipo de llaves alrededor de ella? Así que por lo que yo sé, que durante una si-declaración sólo la primera línea de código es ejecutado. Así en un bucle for, ¿cómo funciona? Yo no entiendo muy bien el concepto de un bucle sin las llaves y con las llaves. Supongo que una explicación con un pedazo de código es de ayuda. Esto es en C por el camino. He aquí un código que he estado mirando como referencia.

int main(int argc, char* argv[])
{
  int i;
  int count = 0;
  for (i = 0; i < 5; i++)
    count++;
    printf("The value of count is: %d\n", count);

  return 0;
}

En este caso, veo que no hay llaves, así que estoy asumiendo que se acaba de mantener la iteración de la primera instrucción hasta que me < 5 y una vez que no es menor que 5 no hace nada, pero cuando he probado el código me sale que también termina la impresión de la instrucción printf. Pensé que un bucle sin llaves que sólo se ejecuta la primera línea de código? O me estoy perdiendo algo aquí.

  • Sé que no es un duplicado de este, simplemente no se puede encontrar…
  • ¿Qué sucede cuando se compila y ejecuta? ¿Qué sucede si usted, a continuación, añadir una llave inicial después de la for y un cierre de uno después de la printf? Parece que alrededor de 30 segundos de esfuerzo de responder a esta para ti, y sería mucho más rápido (y más educativo) de publicar aquí y esperando por una respuesta. No hay absolutamente nada peligroso en ese código que le impide hacer un poco de esfuerzo a sí mismo.
  • Ya lo he intentado una búsqueda antes de plantear la pregunta, pero no pude encontrar nada parecido a lo que yo estaba tratando de preguntar
  • De hecho, me hizo probar esta ya y conseguí una salida que tuvo el valor de contar en la 5 y la imprimió, pero quería confirmar si esto aplica siempre y cómo funcionaba
  • Posibles duplicados de Cuando puedo omitir las llaves en C?
InformationsquelleAutor Tenza | 2014-10-09

2 Comentarios

  1. 7

    Sin llaves, sólo la primera declaración tras el bucle definición se considera que pertenecen al cuerpo del bucle.

    Aviso que en tu ejemplo, printf sólo se llama una vez. A pesar de su sangría coincide con la línea anterior, que es un arenque rojo – C no le importa. Lo que me dice es que quien escribió el código probablemente olvidó las llaves, y la intención de la printf norma para ser parte de el cuerpo del bucle.

    La única vez que me dejaría fuera de las llaves es la hora de escribir una sola línea de if declaración:

    if (condition) statement;
    do_something_else();

    Aquí, no hay sangrado para introducir ambigüedad acerca de si la declaración de la segunda línea es en realidad suponía pertenecer al cuerpo de la if. Usted probablemente sería más seguro que al leer esto que está funcionando según lo previsto.

    • Así que todo lo demás sería considerado fuera del cuerpo como @gmarintes dijo? Y también se aplica esto para todos los bucles y también si-declaraciones?
    • Sí, se aplica en general a los bucles y sentencias condicionales. Hay un montón de discusiones en Google; aquí uno decente.
    • Tenga en cuenta que una línea de do ... while es muy complicado, ya que requiere un punto y coma después de que tanto el cuerpo de la declaración y de la condición.
  2. 2

    Si el bucle no tiene frenos, se ejecutará la siguiente instrucción.
    La sintaxis es esencialmente

    for (<initialization>;<condition>;<increment>) <statement>;

    La «declaración de parte» puede ser cualquier cosa. Podría ser una simple count++; o podría ser un ‘si’/’if-else’ declaración, que incluso podría ser de otra for-loop sin las llaves!

    Por lo que en este caso, el código es similar a:

    for (i = 0; i < 5; i++) {
        count++;
    }
    printf("The value of count is: %d\n", count);
    • No estoy seguro de entender lo que quiere decir que va a ejecutar las instrucciones hasta el siguiente ‘;’? Entonces esto es similar a decir que si hay una condición en la que la primera línea de un bucle que se mantendrá la iteración a través de ella hasta que se ha completado y, finalmente, pasar por el resto de las líneas?
    • Sí. La sintaxis es esencialmente el de (<inicialización>;<condición>;<incremento de>) <estado>, El <estado> parte puede ser cualquier cosa. Si que podría ser una simple count++; o podría ser un ‘si’/’if-else’ declaración, que incluso podría ser de otra for-loop sin las llaves!
    • Bien gracias por la ayuda, que borra las cosas para mí!
    • «Las declaraciones hasta el siguiente ‘;'» no tiene sentido. Sólo puede haber una instrucción.

Dejar respuesta

Please enter your comment!
Please enter your name here