Varios printf en la For-loop como parte de la inicialización, la condición y la actualización de

0

Pregunta

Podría alguien explicarme por qué se imprime 32 y el concepto general de cómo funciona esto?

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))

    return 0;
}
c loops printf
2021-11-23 21:56:07
2

Mejor respuesta

8

Sangría adecuada harían más claro:

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))
        return 0;
}

Así ocurre lo siguiente:

  • a se inicializa a 1. No sé por qué esta variable existe, ya que no se utilizan nunca.
  • for ejecuta su instrucción de inicialización, printf("3");. Esto imprime 3.
  • for evalúa su condición de repetición, printf("2"). Esto imprime 2 y devuelve el número de caracteres que se imprimen, que es 1.
  • Puesto que la condición es truthy, entra en el cuerpo del bucle.
  • El cuerpo se ejecuta return 0;. Esto devuelve de main(), con lo que termina el bucle.

Desde el bucle termina, nunca se nos evalúa la actualización de expresión, printf("1"), por lo que nunca se imprime 1. Y de no repetición de nada.

2021-11-23 22:04:34
0

Usted sabe, un programa que comienza a correr desde la izquierda '{' de la función main(), el fin en el derecho '}' de la función main(), si no hay ningún bucle sin fin.

Como su código de muestra, Su dificultad es entender el diagrama de flujo del bucle for en C el lenguaje.

Como se puede ver, La sintaxis del bucle for es:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Cómo bucle for obras?

1.La instrucción de inicialización se ejecuta sólo una vez.

2.Entonces, la prueba se evalúa la expresión. Si la prueba de expresión se evalúa como falsa, el bucle se termina.

3.Sin embargo, si la prueba de expresión es evaluada a verdadero, instrucciones dentro del cuerpo del bucle for se ejecuta, y la actualización de expresión se actualiza.

4.De nuevo la prueba se evalúa la expresión.

Este proceso continúa hasta que la prueba de la expresión es falsa. Cuando la prueba de la expresión es falsa, el bucle termina.

Así, para el bucle de Diagrama de flujo

enter image description here

En primer lugar, Tome su código como un ejemplo:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Salida
32

1.la inicialización es "printf ("3")"entonces, de impresión:

3

2.La prueba de expresión "printf("2")", que siempre verdadero, de modo de impresión:

2

3.para el cuerpo del bucle "break", que significa poner fin a la ejecución del bucle for,

no ejecutar la actualización de la expresión "printf("1")"

también, el programa de saltar fuera del bucle for, y saltar a "return 0;",

a continuación, terminar la ejecución de este programa.

Así, la salida es

32
En segundo lugar, Tomar su cambio de código como un ejemplo:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Salida
321212121212121212...121212...1212...

Del mismo modo,

1.la inicialización es "printf ("3")"entonces, de impresión:

3

2.La prueba de expresión "printf("2")", que siempre verdadero, de modo de impresión:

2

3.para el cuerpo del bucle "`", vacío, luego no hacer nada. ir a la versión actualizada de expresión

"printf("1")"

4.la actualización de la expresión "printf("1")", a continuación, imprimir

1

5.a continuación, pasar a la prueba de expresión "printf("2")", que es "2.La prueba

la expresión "printf("2")", que siempre verdadero, de modo de impresión".Debido a que el

el cuerpo del bucle es "`",vacío, entonces siempre goto de la actualización

la expresión "printf("1")" para la prueba de expresión "printf("2")",

es por eso que después de la impresión "32"la función que imprime bucle infinito

"12".Y, que la función no termina nunca detener la impresión "12"a menos que usted

deje que la función.

Así, Así, Así que la salida es

32121212...121212...121212...
En tercer lugar, Tomar su recientemente ha cambiado el código de un ejemplo:
#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1")) 

    return 0;
}
Salida
32

1.el programa comienza a correr desde la izquierda '{' de la función main(),

esa es la instrucción de inicialización de la variable Temporal

"int a=1;".

Que la instrucción se define una "int"escrito variable temporal "a"y

establece su valor a "1", Pero que imprimir nada!

2.a continuación, el programa goto bucle for.

3.la instrucción de inicialización es "printf ("3")", a continuación, imprimir

"3"y

ir a la prueba de expresión.

3

4.La prueba de expresión "printf("2")", que siempre es cierto, por lo que

print "2"y pasar el bucle for expresión corporal.

2

5.el bucle for expresión corporal "return 0", la expresión

"return 0"volver '0'a la función main(),y al final la

la ejecución de la main(), Pero no imprimir nada.

Así, el resultado es:

32
Final. Gracias!
2021-11-24 07:01:53

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................