Plusieurs printf dans la boucle For dans le cadre de l'initialisation, la condition et la mise à jour

0

La question

Quelqu'un pourrait-il m'expliquer pourquoi il imprime 32 et le concept global de la façon dont cela fonctionne?

#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

La meilleure réponse

8

Bonne indentation rendrait plus clair:

#include <stdio.h>

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

De sorte que le suivant se produit:

  • a est initialisé à 1. Je ne sais pas pourquoi cette variable existe, comme il n'est jamais utilisé.
  • for elle exécute son instruction d'initialisation, printf("3");. Cette affiche 3.
  • for évalue sa répétition condition, printf("2"). Cette affiche 2 et renvoie le nombre de caractères qui ont été imprimées, ce qui est 1.
  • Puisque la condition est truthy, il va dans le corps de la boucle.
  • Le corps exécute return 0;. Cela renvoie d' main(), bouclant ainsi la boucle.

Étant donné que la boucle se termine, nous n'avons jamais évalue la mise à jour de l'expression, printf("1"), de sorte qu'il imprime jamais 1. Et nous ne recevons aucune répétition de quoi que ce soit.

2021-11-23 22:04:34
0

Vous le savez, un programme commence à courir à partir de la gauche ‘{’ de la fonction main () à la fin dans le droit '}' de la fonction main(), si il n'y a pas de boucle sans fin.

Comme votre montre, Votre difficulté est de comprendre le schéma de la boucle for en langage C.

Comme vous pouvez le voir, la syntaxe de La boucle for:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Comment faire pour que la boucle fonctionne?

1.L'instruction d'initialisation est exécutée qu'une seule fois.

2.Ensuite, le test de l'expression est évaluée. Si le test d'expression est évaluée à false, la boucle est terminée.

3.Cependant, si le test d'expression est évaluée à true, les instructions à l'intérieur du corps de la boucle sont exécutées, et la mise à jour d'expression est mise à jour.

4.De nouveau le test de l'expression est évaluée.

Ce processus continue jusqu'à ce que l'expression de test est faux. Lorsque le test d'expression est false, la boucle se termine.

Donc, pour la boucle de l'Organigramme

enter image description here

Tout d'abord, Prenez votre code comme exemple:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Sortie
32

1.initialisation "printf ("3")"puis, d'impression:

3

2.L'expression de test "printf("2")", c'est toujours vrai, à imprimer:

2

3.pour le corps de la boucle "break", qui signifie la fin de l'exécution de la boucle for,

ne pas exécuter la mise à jour de l'expression "printf("1")"

aussi, le programme de sauter en dehors de la boucle for, et le saut à l' "return 0;",

ensuite, la fin de l'exécution de ce programme.

Donc, la sortie est

32
Ensuite, Prenez votre code modifié comme exemple:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Sortie
321212121212121212...121212...1212...

De même,

1.initialisation "printf ("3")"puis, d'impression:

3

2.L'expression de test "printf("2")", c'est toujours vrai, à imprimer:

2

3.pour le corps de la boucle "`", vide, puis ne rien faire. goto la mise à jour de l'expression

"printf("1")"

4.la mise à jour de l'expression "printf("1")"puis, impression

1

5.ensuite, passez à l'essai de l'expression "printf("2")"c'est le "2.Le test

l'expression "printf("2")", c'est toujours vrai, donc "print".Parce que le

le corps de la boucle est "`",vide, toujours goto de la mise à jour

l'expression "printf("1")" à l'épreuve de l'expression "printf("2")",

c'est pourquoi après l'impression "32"cette fonction imprime boucle infinie

"12".Et, cette fonction ne finissent jamais arrêter l'impression "12"à moins que vous

arrêter cette fonction.

Donc, Donc, Donc, la sortie est

32121212...121212...121212...
Troisièmement, Prenez votre récemment modifié le code comme un exemple:
#include <stdio.h>

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

    return 0;
}
Sortie
32

1.le programme commence à courir à partir de la gauche ‘{’ de la fonction main(),

c'est l'instruction d'initialisation de variable Temporaire

"int a=1;".

Cette déclaration définit un "int"tapé à la variable temporaire "a"et

définit sa valeur "1", Mais que l'impression de rien!

2.ensuite, le programme goto pour la boucle.

3.l'instruction d'initialisation est "printf ("3")"puis, impression

"3"et

goto, l'expression de test.

3

4.L'expression de test "printf("2")", c'est toujours vrai, donc

print "2"et goto la boucle de l'expression du corps.

2

5.la boucle de l'organe d'expression "return 0"l'expression

"return 0"le retour"0"pour la fonction main(),et à la fin de la

l'exécution de la méthode main(), Mais n'affichera rien.

Donc, la sortie est:

32
Fin. Merci!
2021-11-24 07:01:53

Dans d'autres langues

Cette page est dans d'autres langues

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