Birisi bana neden 32 yazdırdığını ve bunun nasıl çalıştığına dair genel konsepti açıklayabilir mi?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Birisi bana neden 32 yazdırdığını ve bunun nasıl çalıştığına dair genel konsepti açıklayabilir mi?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Doğru girinti onu daha net hale getirecektir:
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Yani aşağıdakiler gerçekleşir:
a
için başlatılır 1
. Bu değişkenin neden var olduğunu bilmiyorum, çünkü hiç kullanılmadı.for
başlatma deyimini yürütür, printf("3");
. Bu yazdırır 3
.for
tekrarlama durumunu değerlendirir, printf("2")
. Bu yazdırır 2
ve yazdırılan karakter sayısını döndürür; 1
.return 0;
. Bu geri dönüyor main()
böylece döngü sona erer.Döngü sona erdiğinden, güncelleme ifadesini hiçbir zaman değerlendirmeyiz, printf("1")
bu yüzden asla yazdırır 1
. Ve hiçbir şeyin tekrarını alamıyoruz.
Biliyorsunuz, bir program, sonsuz döngü yoksa, main () işlevinin solundan ‘ { ’ , main () işlevinin sağından '}' ile bitmeye başlar.
Kodunuzun gösterdiği gibi, Zorluğunuz C dilinde for döngüsünün akış şemasını anlamaktır.
for (initializationStatement; testExpression; updateStatement)
{
// statements inside the body of loop
for loop body;
}
1.Başlatma deyimi yalnızca bir kez yürütülür.
2.Daha sonra test ifadesi değerlendirilir. Sınama ifadesi false olarak değerlendirilirse, for döngüsü sonlandırılır.
3.Ancak, sınama ifadesi true olarak değerlendirilirse, for döngüsünün gövdesi içindeki deyimler yürütülür ve güncelleştirme ifadesi güncelleştirilir.
4.Yine test ifadesi değerlendirilir.
Bu işlem, sınama ifadesi yanlış olana kadar devam eder. Sınama ifadesi false olduğunda, döngü sona erer.
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) break;
return 0;
}
32
1.başlatma var "printf ("3")
", sonra yazdır:
3
2.Test ifadesi "printf("2")
"bu her zaman doğrudur, bu yüzden yazdır:
2
3.vücut döngüsü için "break
"yani biten yürütülmesi için döngü,
güncelleştirilmiş ifadeyi yürütme "printf("1")
"
ayrıca, program for döngüsünden atlar ve "return 0;
",
ardından, bu programın yürütülmesini sonlandırın.
Yani, çıktı şu şekildedir
32
#include <stdio.h>
int main(){
for (printf ("3"); printf("2"); printf("1")) ;
return 0;
}
321212121212121212...121212...1212...
Benzer şekilde,
1.başlatma var "printf ("3")
", sonra yazdır:
3
2.Test ifadesi "printf("2")
"bu her zaman doğrudur, bu yüzden yazdır:
2
3.vücut döngüsü için""", boş, sonra hiçbir şey yapmayın. güncellenmiş ifadeye git
"printf("1")
"
4.güncellenmiş ifade "printf("1")
", sonra yazdır
1
5.ardından, test ifadesine gidin "printf("2")
", yani " 2.Test
ifade "printf("2")", bu her zaman doğrudur, bu yüzden yazdır".Çünkü
döngünün gövdesi""", boş, sonra her zaman güncellenenden git
ifade "printf("1")
"test ifadesine"printf("2")
",
bu yüzden yazdırdıktan sonra "32
"bu işlev sonsuz döngü yazdırır
"12
".Ve bu özellik asla bitmez, yazdırmayı durdurur."12
"tabi seni
bu işlevi durdurun.
Yani, Yani, Yani çıktı
32121212...121212...121212...
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
32
1.program main()işlevinin sol ‘{’ kısmından çalışmaya başlar.,
bu, Geçici değişkenin başlatma ifadesidir
"int a=1;
".
Bu deyimi tanımlar "int
"yazılan geçici değişken "a
", ve
değerini "olarak ayarlar1
"Ama bu hiçbir şey yazdırmıyor!
2.ardından, program for döngüsüne gider.
3.başlatma deyimi "printf ("3")
", sonra yazdır
"3
",ve
test ifadesine git.
3
4.Test ifadesi "printf("2")
"bu her zaman doğrudur, yani
Yazıcı "2
"ve döngü gövdesi ifadesine gidin.
2
5.for döngüsü gövdesi ifadesi "return 0
", ifade
"return 0
" dönüş '0
'main () işlevine gidin ve
main () yürütülür, Ancak hiçbir şey yazdırılmaz.
Yani, çıktı şu şekildedir:
32