2013-05-08 13 views
5

Studia dla informatyki finale ......Dla pętli z printf jako 3 argumentów

ja naprawdę nie mogę zrozumieć ten przykład z .....

Rozumiem, że pierwszy argument pozostawiając puste sprawia, że ​​zachowują się jak PRAWDA ....

ale nie rozumiem co pozostawiając zmienną w drugiej zezwoli na osiągnięcie argumentu ....

Co nie rozumiem jest jak najbardziej oświadczenie printf " aktualizuje "zmienny warunek ...

#include<stdio.h> 
    int main() 
    { 
    int x=1, y=1; 
    for(; y; printf("%d %d\n", x, y)) 
    { 
     y = x++ <= 5; 
    } 
    printf("\n"); 
    return 0; 
    } 

Wyjście jest:

2 1 
3 1 
4 1 
5 1 
6 1 
7 0 

edit:

Rozumiem teraz pętli for części konstrukcji .....

Dzięki za odpowiedzi - bardzo wnikliwe dzięki!

+2

Instrukcja "pozostawienie pierwszego argumentu pustego powoduje, że zachowuje się jak PRAWDA" nie jest prawdą. Druga część pętli for jest tym, co jest warunkiem, a nie pierwszym. –

Odpowiedz

14

for pętla może być traktowane jako for (INITIALIZATION; CONDITION; AFTERTHOUGHT)

Pierwsza część pętli dla inicjalizacji. Pozostawienie tego pustego jest w porządku, oznacza to tylko, że zainicjowałeś już wszystkie zmienne wymagane przez pętlę.

Numer y w drugim wyrażeniu (lub stanie) pętli for jest równoważny y!=0. Utrzymuje pętlę for działającą aż do y==0.

Na początku każdej iteracji wykonywany jest ciąg dalszy, ale nie zmienia wartości y. Ciało pętli zmienia się jednak y.

Większość podręczników to opisuje. Lub zobacz Wikipedia lub cplusplus.

0

ta uruchamia program aż y wynosi 0, ponieważ 0 jako liczba całkowita jest również Fałsz

+0

Staraj się nie dawać czego, on/ona może oczywiście zobaczyć co, oni zastanawiają się, dlaczego. –

6

Rozważmy tę strukturę w pętli for:

for (a; b; c) 
{ 
    d; 
} 

jest to, co będzie się działo:

  1. Kod a zostanie wykonany
  2. Zostanie oceniony warunek b. Jeśli jest fałszywe, pętla for zrywa się.
  3. Kod d zostaje wykonany.
  4. Wykonano kod c.
  5. Przejdź do kroku 2

Co się dzieje w twoim na końcu jest to, że „c” część kodu drukuje wartość y i zdarza się 0. Warunek jest następnie oceniany. Od y == 0, pętla for zostanie przerwana, ponieważ 0 jest odpowiednikiem false.

0
Leaving a variable y implies the loop will run till y is true 
loop will stop when y becomes false 

Now this condition that you have written in body evaluates value of y 
y = x++ <= 5; 

Whenever x++ <= 5 implies y is true that is 1 
So it starts with x=1 and prints until value of x becomes 7 
and y=x++ <= 5; returns false and loop exits. 
2

Sztuczka znalazłem na początku było, gdybym nie mógł zrozumieć, dla pętli, spróbuj i rozbicie go na odpowiednik pętli while. Można również PAREN rzeczy, aby uczynić je bardziej czytelne (tak długo, jak zgodnie z kolejnością operacji na parens aby nie zepsuć oceny pętla będzie wyglądać tak z tymi zmianami.

#include<stdio.h> 
int main() 
{ 
    int x=1, y=1; 
    while(y) 
    { 
     y = (x++ <= 5); 
     printf("%d %d\n", x, y) 
    } 
    printf("\n"); 
    return 0; 
} 

z tymi pary Zmiany ułatwiają dostrzeżenie, że instrukcja wydruku nie zmienia/nie aktualizuje niczego, ale drukuje tylko wypadkową wartości y.

0

Chociaż odpowiedź dostarczona przez simonc jest idealna, istnieje również praktyczne rozwiązanie. ten program w Visual Studio, dodaj punkt przerwania na początku pętli for i uruchom każdą instrukcję za pomocą klawisza F10, który jasno wskaże, jaki przepływ zostanie wykonany w czasie wykonywania, a pomoże ci usunąć wszystkie twoje wątpliwości. utrzymywać czujność na wartościach zmiennych, które pomogą dalej. To właśnie pomogło mi w większości moich wątpliwości. Ciesz się kodowaniem!

Powiązane problemy