DO WHILE PETLJA
do { } while petla omogućava da
se naredbe izvršavaju dok je uvjet istinit - TRUE (različit od nule).
Petlja se izvršava barem jednom.
/* Demonstracija petlje DO...WHILE */
#include <stdio.h>
main()
{
int value, r_digit;
printf("Unesite broj koji će se ispisati od kraja.\n");
scanf("%d", &value);
do {
r_digit = value % 10;
printf("%d", r_digit);
value = value / 10;
} while( value != 0 );
printf("\n");
}
Gornji program broj koji unese korisnik ispisuje
od kraja. To čini koristeći ostatak dijeljenja ( % operator ) da
bi krajnje desnu znamenku upisao u varijablu r_digit.
Početni broj se zatim dijeli sa 10, i operacija se ponavlja dok broj ne
postane jednak 0.
Naša je namjera pokazati da je ovakvo programiranje nepravilno i da bi se trebalo izbjegavati. Ima potencijalne probleme, kojih morate biti svjesni.
Jedan od takvih problema jest nedostatak kontrole. Pogledajmo slijedeći dio programa,
do {
r_digit = value % 10;
printf("%d", r_digit);
value = value / 10;
} while( value != 0 );
NEMA nikakvog izbora hoće li se petlja izvršavati
ili ne. Ulazak u petlju je automatski, jer je vaš jedini izbor nastavak.
Još jedan problem je što se petlja uvijek bar jednom izvrši. Ovo ide uz nedostatak kontrole. To znači da je moguće ući u do { } while petlju s nevaljanim podacima.
Programeri početnici lako mogu zapasti u brdo nevolja, pa je naša preporuka da ovu petlju izbjegavate koristiti. Ovo je jedini put da ćete je ovdje susresti. Uporabu je lako izbjeći korištenjem slijedećeg algoritma,
inicijaliziraj varijablu za kontrolu petlje
while( varijabla kontrole petlje je valjana ) {
obrađuj podatke
prilagodi kontrolnu varijablu ako je potrebno
}
Sada napišimo ponovno gornji program bez upotrebe
do { } while petlje.
/* ponovljeni program bez do-while */
#include <stdio.h>
main()
{
int value, r_digit;
value = 0;
while( value <= 0 ) {
printf("Unesite broj koji će se ispisati od kraja.\n");
scanf("%d", &value);
if( value <= 0 )
printf("Broj mora biti pozitivan\n");
}
while( value != 0 )
{
r_digit = value % 10;
printf("%d", r_digit);
value = value / 10;
}
printf("\n");
}
Ispis programa
Unesite broj koji će se ispisati od kraja.
-43
Broj mora biti pozitivan
Unesite broj koji će se ispisati od kraja.
423
324