Wielokrotne drukowanie w pętli For, jako część inicjalizacji, warunki i aktualizacji

0

Pytanie

Czy może mi ktoś wytłumaczyć, dlaczego drukuje 32 i ogólną koncepcję tego, jak to działa?

#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

Najlepsza odpowiedź

8

Prawidłowy odstęp będzie bardziej czytelny:

#include <stdio.h>

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

Tak więc, występuje następujący:

  • a jest inicjowany do 1. Nie wiem, dlaczego ta zmienna istnieje, tak jak ona nigdy nie była używana.
  • for wykonuje swoją instrukcję inicjalizacji, printf("3");. To drukuje 3.
  • for ocenia jego warunek powtórzenia, printf("2"). To drukuje 2 i zwraca liczbę wydrukowanych znaków, która jest równa 1.
  • Ponieważ warunek jest spełniony, to wchodzi w ciało cyklu.
  • Ciało wykonuje return 0;. To zwraca z main()tym samym kończąc cykl.

Ponieważ cykl się kończy, nigdy nie oceniamy wyrażenie aktualizacji, printf("1")dlatego nigdy nie jest drukowana 1. I nie otrzymujemy żadnego powtarzania czegokolwiek.

2021-11-23 22:04:34
0

Wiesz, że program zaczyna działać po lewej stronie " {"funkcji main(), kończy się po prawej stronie"} " funkcji main(), jeśli nie ma nieskończonej pętli.

Jak pokazuje swój kod, twoja trudność polega na tym, aby zrozumieć schemat blokowy pętli for w C.

Jak widać, składnia pętli for jest następująca:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Jak działa cykl?

1.Operator inicjalizacji jest wykonywana tylko raz.

2.Następnie obliczane jest wyrażenie testowe. Jeśli test wyrażenie jest oceniane jako fałszywy, pętla for jest zakończona.

3.Jednak, jeśli test wyrażenie jest oceniane jako prawdziwe, wykonywane są instrukcje wewnątrz pętli for i aktualizowane wyrażenie update.

4.Ponownie obliczane jest wyrażenie testowe.

Proces ten trwa do momentu, aż testową wyrażenie nie będzie fałszywe. Kiedy testową wyrażenie ma wartość false, pętla kończy się.

Tak więc, dla diagramy cyklu

enter image description here

Po pierwsze, weź swój kod jako przykład:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Wyjście
32

1.inicjalizacja-to "printf ("3")", a następnie wydrukuj:

3

2.Testowe wyrażenie "printf("2")"to zawsze jest to prawda, tak, że można drukować:

2

3.dla pętli ciała "break"to oznacza zakończenie wykonywania pętli for,

nie należy zaktualizowane wyrażenie "printf("1")"

ponadto, program wyskakuje z pętli for i przechodzi do "return 0;",

następnie wykonuj tego programu.

Więc wynik jest taki

32
Po drugie, weź swój zmodyfikowany kod jako przykład:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Wyjście
321212121212121212...121212...1212...

Podobnie

1.inicjalizacja-to "printf ("3")", a następnie wydrukuj:

3

2.Testowe wyrażenie "printf("2")"to zawsze jest to prawda, tak, że można drukować:

2

3.dla pętli ciała "`", puste, nic nie rób. przejdź do odnowionego słowach

"printf("1")"

4.zaktualizowane wyrażenie "printf("1")", a następnie wydrukuj

1

5.następnie przejdź do testowego słowach "printf("2")", czyli " 2.Test

wyrażenie "printf("2")", to zawsze jest to prawda, dlatego drukuj".Bo

ciało cyklu "`",jest puste, a następnie zawsze przechodzi z zaktualizowanego

wyrażenie "printf("1")"do testowego słowach "printf("2")",

dlatego po wydrukowaniu "32"ta funkcja wyświetla nieskończoną pętlę

"12".I ta funkcja nigdy nie przestanie drukować".12"jeśli tylko ty

zatrzymaj tę funkcję.

Tak więc, więc, więc wynik jest taki

32121212...121212...121212...
Po trzecie, weź swój ostatnio zmieniony kod jako przykład:
#include <stdio.h>

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

    return 0;
}
Wyjście
32

1.program zaczyna działać z lewej " {"funkcji main(),

to operator inicjalizacji zmiennej tymczasowej

"int a=1;".

To stwierdzenie określa "int"narzędzie do tymczasowa zmienna "a"i

ustawia jego wartość jest równa "1"Ale to nic nie drukuje!

2.następnie program przechodzi do pętli for.

3.operator inicjalizacji "printf ("3")", a następnie wydrukuj

"3"i

przejdź do testowego słowach.

3

4.Testowe wyrażenie "printf("2")"to zawsze jest to prawda, tak, że

drukowanie "2"i przejdź do ekspresji ciała dla cyklu.

2

5.wyrażenie ciała pętli for "return 0"wyrażenie

"return 0"zwrot "0'do funkcji main (), a następnie zakończ

wykonanie main(), ale nic nie drukuje.

Tak więc, wynik jest taki:

32
Koniec, dziękuję!
2021-11-24 07:01:53

W innych językach

Ta strona jest w innych językach

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