C programmering :: Kontrolstrukturer
while og do-while
og i kildetekst bliver det til:
- indtast programmet eller download og gem på filen while.c
- compiler og kør programmet med:
Programlinier:
10-13 | Definerer variabler og initialiserer værdier. |
14 | Start på while-løkken der gentager sætningerne i blokken {} i linierne 15-32. Betingelsen er at i er mindre end Slut for gentagelsen. |
16-17 | Sætter variblers startværdier før den næste indre while-løkke. |
18 | Start på næste niveau af en while-løkke, der gentager sætningerne i blokken i linierne 19-26. |
20 | Test om i kan deles med j. Operatoren % kaldes modulos og giver rest ved divisionen i/j. F.eks. 2/3 giver rest 2, 3/3 giver 0, 4/3 giver 1 i rest o.s.v. Hvis rest giver 0 kan i deles med j og sætninger i blokken linie 21-24 udføres. |
22 | Sæt erPrimtal til falsk. |
23 | Afbryd den inderste løkke med break, der er ingen grund at forsøge med flere værdier af j. break tvinger programmet til at springe ud af løkken og fortsætte i linie 27. |
25 | Mindsk j med 1 til næste divisor. |
26 | Slut på whileblok spring til starten på while-betingelsen i linie 18. |
27-30 | Udskriv hvis det var et primtal. |
31 | Øg værdien af i med 1 til næste test. |
32 | Slut på whileblok spring til starten på while-betingelsen i linie 14. |
Vi kan bruge break og continue til at lave brud i løkken. Typisk anvendelse er at du i en while eller do-while placerer en if med en betingelse der laver brudet:
while (betingelse)
{
...sætninger
if (betingelse)
{
break;
}
}
...break springer hertil
{
...sætninger
if (betingelse)
{
break;
}
}
...break springer hertil
I eksemplet fra while.c programmet har en while indlejret i en while, to niveauer en ydre og indre niveau. Den break er i den inderste while-blok og springer derfor kun ud af den inderste while-blok, ikke den yderste.
Med continue springer eksekveringen til den tilhørende while's betingelse, dvs. den springer altså ikke ud af løkken, den starter påny med testen af betingelsen.
while (betingelse) ...continue springer hertil
{
...sætninger
if (betingelse)
{
continue;
}
}
{
...sætninger
if (betingelse)
{
continue;
}
}
og hvis det er med do-while springer eksekveringen stadig til while-betingelse som er placeret i bunden af denne kontrolstruktur.