2009-07-02 4 views

Odpowiedz

35
do 
{ 
    // whatever 
} while (!condition); 
+3

Uhh ... To jest bardzo smutne. Emil uderzył szybciej niż ja ... "Przyjęto" powinno mu się udać ... – Adrien

+10

Masz mniej powtórzeń, a to bardzo proste pytanie, więc chętnie ci je dam. :) –

+1

Jak powiedział Jalf: Jeśli chcesz wykonać pętlę do wykonania, a nie pętlę do wykonania, będziesz musiał zanegować warunek. –

9

Gdy chcesz sprawdzić stan na początek pętli, po prostu neguje stan na standardowym while pętli:

while(!cond) { ... } 

Jeśli potrzebujesz go na końcu, użyj do. .. while pętla i neguje warunek:

do { ... } while(!cond); 
7

można używać makr do symulacji powtarzanych aż składni.

#define repeat do 
#define until(exp) while(!(exp)) 
+0

Dokładnie tego szukałem. Nie wiem, jak działa "exp". Czy to generyczny symbol wieloznaczny? Dziękuję Ci! –

+1

@ Ace.C To nazwa argumentu. Drugie '# define' tworzy makro, które działa jak funkcja. Tak więc w tym przypadku '#define until (exp)' to makro o nazwie 'until', które przyjmuje parametr' exp' i rozwija się do 'while (! (Exp))'. –

+0

Dziękuję @ Conor.O, Czy jest możliwe i artykuł lub inny post na ten temat, do którego mógłbyś mnie dodać? Mam problem ze znalezieniem dobrych zasobów, jak tworzyć tego rodzaju makra –

2

Dla przykładu, jeśli chcesz mieć pętlę, która zatrzymała się, gdy policzyła wszystkie osoby w grupie. Uwzględnimy wartość X równą liczbie osób w grupie, a licznik będzie użyty do zliczenia wszystkich osób w grupie. (! Warunek) do napisania

chwilę

kod będzie:

int x = ludzie;

int counter = 0;

, a (X = licznik!)

{

licznik ++;

}

powrót 0;

1

Wystarczy użyć:

do 
{ 
    //enter code here 
} while (!condition); 

Więc co to robi to, że przenosi swoje „Sprawdź stan” udział do końca, ponieważ while jest na końcu. Sprawdza więc tylko warunek po uruchomieniu kodu, dokładnie tak, jak chcesz.

0

Powtórzenie powinno być prostą pętlą n razy pętlą ... pozbawioną warunku wersją pętli.

#define repeat(n) for (int i = 0; i < n; i++) 

repeat(10) { 
    //do stuff 
} 

można również dodać dodatkowy barce wyizolować zmienna i jeszcze bardziej

#define repeat(n) { for (int i = 0; i < n; i++) 
#define endrepeat } 

repeat(10) { 
    //do stuff 
} endrepeat;