Vários printf em ciclo como parte da inicialização, condição e atualização

0

Pergunta

Alguém poderia me explicar por que ele imprime 32 e o conceito geral de como isso funciona?

#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

Melhor resposta

8

Adequada recuo seria torná-lo mais claro:

#include <stdio.h>

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

Então, acontece o seguinte:

  • a é inicializado para 1. Eu não sei por que essa variável existe, uma vez que ele nunca usou.
  • for executa a sua instrução de inicialização, printf("3");. Esta função imprime 3.
  • for avalia a sua condição de repetição, printf("2"). Esta função imprime 2 e retorna o número de caracteres que foram impressas, o que é 1.
  • Uma vez que a condição é truthy, ele vai para o corpo do loop.
  • O corpo executa return 0;. Este retorna do main(), terminando assim o ciclo.

Desde o loop termina, nós nunca avalia a expressão de atualização, printf("1"), para que ele nunca imprime 1. E temos nenhuma repetição de qualquer coisa.

2021-11-23 22:04:34
0

Você sabe, um programa começa a ser executado a partir da esquerda '{' da função main(), end no direito '}' da função main(), se não houver um loop infinito.

Como o seu código mostra, Sua dificuldade é entender o fluxograma do ciclo for na linguagem C.

Como você pode ver, A sintaxe de um loop for é:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Como para o ciclo funciona?

1.A instrução de inicialização é executada apenas uma vez.

2.Em seguida, a expressão de teste é avaliada. Se a expressão de teste é avaliada como false, o loop for é encerrado.

3.No entanto, se a expressão de teste é avaliada como true, instruções dentro do corpo do loop são executadas, e a expressão de atualização é atualizado.

4.Novamente a expressão de teste é avaliada.

Este processo continua até que a expressão de teste for falsa. Quando a expressão de teste for falsa, o loop termina.

Assim, para o ciclo de Fluxograma

enter image description here

Em primeiro lugar, Tomar o seu código como exemplo:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Saída
32

1.a inicialização é "printf ("3")", em seguida, imprimir:

3

2.A expressão de teste "printf("2")", que sempre é verdadeira, e para imprimir:

2

3.para o corpo de loop "break", que significa acabar com a execução do loop for,

não executar atualizado expressão "printf("1")"

além disso, o programa salto para fora do loop for, e ir para "return 0;",

em seguida, terminar a execução do programa.

Então, a saída é

32
Em segundo lugar, Tomar o seu código alterado como um exemplo:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Saída
321212121212121212...121212...1212...

Da mesma forma,

1.a inicialização é "printf ("3")", em seguida, imprimir:

3

2.A expressão de teste "printf("2")", que sempre é verdadeira, e para imprimir:

2

3.para o corpo de loop, "`", vazia, então não fazer nada. ir para a expressão atualizado

"printf("1")"

4.atualizado expressão "printf("1")", em seguida, imprimir

1

5.em seguida, ir para a expressão de teste "printf("2")", que é "2.O teste

a expressão "printf("2")", que sempre verdadeira, de modo a imprimir".Porque o

o corpo do loop é "`",vazio e em seguida, sempre goto a partir atualizado

a expressão "printf("1")" para a expressão de teste "printf("2")",

que é por isso que após a impressão "32"essa função imprime loop infinito

"12".E, que nunca função da parada de extremidade de impressão "12"a menos que você

parar essa função.

Então, Então, Então a saída é

32121212...121212...121212...
Em terceiro lugar, Tomar o seu mudaram recentemente de código como exemplo:
#include <stdio.h>

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

    return 0;
}
Saída
32

1.o programa começa a ser executado a partir da esquerda '{' da função main(),

essa é a instrução de inicialização de variável Temporária

"int a=1;".

Essa instrução define um "int"digitado variável temporária "a"e

define o valor para "1", Mas que imprimir nada!

2.em seguida, o programa goto loop for.

3.a instrução de inicialização é "printf ("3")", em seguida, imprimir

"3"e

ir para a expressão de teste.

3

4.A expressão de teste "printf("2")", que sempre é verdadeira, então

print "2"e goto loop expressão corporal.

2

5.o corpo do loop de expressão "return 0"a expressão

"return 0"return '0"para a função main(),e no final o

execução de main(), Mas imprimir nada.

Então, a saída é:

32
Fim. Obrigado!
2021-11-24 07:01:53

Em outros idiomas

Esta página está em outros idiomas

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