Przedstawiony kod źródłowy ma za zadanie wyświetlenie
$liczba = 1; while ($liczba != 0) { $liczba = rand(0, 100); echo $liczba; }
rand().rand(0, 100) losuje także 0 i 100, a 0 kończy pętlę.Pytanie z egzaminu CKE, czerwiec 2018 (arkusz E.14-X-18.06).
Zmienna $liczba zaczyna od 1 tylko po to, żeby warunek $liczba != 0 był prawdziwy przy pierwszym sprawdzeniu i pętla w ogóle wystartowała. W każdym obiegu rand(0, 100) losuje liczbę całkowitą z przedziału od 0 do 100 włącznie, a echo ją wyświetla. Gdy wypadnie 0, zostaje ono jeszcze wyświetlone, po czym warunek staje się fałszywy i pętla się kończy.
To typowy wzorzec pętli z warunkiem sprawdzanym na początku, w której liczby obiegów nie da się przewidzieć. Ten sam efekt bez sztucznej wartości startowej daje do { ... } while ($liczba != 0);, bo w niej warunek sprawdzany jest dopiero po pierwszym obiegu.
Wybór złej odpowiedzi zaczyna się zwykle od pominięcia jednej z dwóch funkcji. rand(0, 100) obejmuje oba końce przedziału, więc losowane są liczby od 0 do 100, a nie od 1 do 99. Zero musi być możliwe do wylosowania, bo tylko ono kończy pętlę.
Kolejne liczby od 1 do 100 dałaby pętla z licznikiem, na przykład for ($i = 1; $i <= 100; $i++). Tu nie ma żadnego zwiększania wartości, jest losowanie, więc wypisywane liczby nie tworzą ciągu.
Skrypt PHP wykonuje serwer i nie czyta danych z klawiatury użytkownika strony. Dane od użytkownika trafiają do niego z formularza, przez $_POST lub $_GET. W tym kodzie wszystkie wartości pochodzą z generatora liczb losowych, a pętla działa do wylosowania 0.
Zawsze warto sprawdzić, skąd w pętli pochodzą wartości i co kończy jej działanie.