Ar putea cineva sa-mi explice de ce se imprimă 32 și conceptul general de cum funcționează acest lucru?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Ar putea cineva sa-mi explice de ce se imprimă 32 și conceptul general de cum funcționează acest lucru?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Buna indentare ar face mai clare:
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Așa se întâmplă următoarele:
a
este inițializat la 1
. Nu știu de ce această variabilă există, deoarece nu este niciodată folosit.for
execută inițializare declarație, printf("3");
. Acest printuri 3
.for
evaluează repetarea acesteia condiție, printf("2")
. Acest printuri 2
și returnează numărul de caractere care au fost tipărite, care este 1
.return 0;
. Acest lucru se întoarce la main()
astfel se încheie bucla.Când bucla se termină, n-am evaluează actualizarea exprimare, printf("1")
, astfel încât să nu imprimă 1
. Și vom ajunge la nici o repetiție a ceva.
Știi, un program începe să curgă de la stânga '{' de funcția main(), end în dreptul '}' de funcția main(), dacă nu există nici o buclă fără sfârșit.
Ca codul de spectacole, dificultatea este de a înțelege organigrama de buclă, în limbajul C.
for (initializationStatement; testExpression; updateStatement)
{
// statements inside the body of loop
for loop body;
}
1.Inițializarea declarație este executat o singură dată.
2.Apoi, testul de expresie este evaluată. Dacă testul expresie este evaluată la false, pentru bucla este reziliat.
3.Cu toate acestea, dacă testul expresie este evaluată la true, declarații în interiorul corpului pentru bucla sunt executate, și actualizarea de exprimare este actualizat.
4.Din nou testul expresie este evaluată.
Acest proces continuă până când testul expresia este falsă. Atunci când testul expresia este falsă, bucla se termină.
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) break;
return 0;
}
32
1.initializare este "printf ("3")
"atunci, de imprimare:
3
2.Testul de exprimare "printf("2")
", care întotdeauna adevărat, așa că de imprimare:
2
3.pentru corpul buclei "break
"înseamnă că se încheie execuția buclei pentru,
nu executa actualizat expresie "printf("1")
"
de asemenea, programul sari de buclă și sari pentru a "return 0;
",
apoi, la sfârșitul executării acestui program.
Deci, rezultatul este
32
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) ;
return 0;
}
321212121212121212...121212...1212...
În mod similar,
1.initializare este "printf ("3")
"atunci, de imprimare:
3
2.Testul de exprimare "printf("2")
", care întotdeauna adevărat, așa că de imprimare:
2
3.pentru corpul buclei "`", gol, apoi nu fac nimic. goto actualizat expresie
"printf("1")
"
4.actualizat expresie "printf("1")
"atunci, de imprimare
1
5.apoi, du-te la testul de exprimare "printf("2")
", care este "2.Testul
expresia "printf("2")", care întotdeauna adevărat, așa print".Pentru că
corpul buclei este de "`",gol, apoi du-te din actualizate
expresia "printf("1")
" la testul de exprimare "printf("2")
",
de aceea, după ce imprimarea "32
"această funcție imprimă buclă infinită
"12
".Și, că funcția n-end opri imprimarea "12
"dacă nu
opri această funcție.
Deci, Deci, Deci ieșirea este
32121212...121212...121212...
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
32
1.programul începe să curgă de la stânga '{' de funcția main(),
asta e inițializare declarație de variabilă Temporară
"int a=1;
".
Această declarație definește un "int
"tastat variabilă temporară "a
"și
seturi sale de valoare "1
", Dar care imprima nimic!
2.apoi, programul goto pentru bucla.
3.inițializarea declarație este "printf ("3")
"atunci, de imprimare
"3
"și
du-te la testul de exprimare.
3
4.Testul de exprimare "printf("2")
", care întotdeauna adevărat, așa că
print "2
"și du-te pentru corpul buclei de exprimare.
2
5.pentru bucla de exprimare corp "return 0
", expresia
"return 0
"return '0
în funcția main(),și să pună capăt
executarea main(), Dar imprima nimic.
Deci, rezultatul este:
32