לולאת while
לולאת while מאפשרת לנו לחזור על קטע קוד כלשהו כל עוד תנאי בוליאני כלשהו מתקיים. הסינטקס עבור לולאה כזו הוא:
while (boolean expression) {
// Loop body
}
כשנגיע לתחילת הלולאה, נבדוק האם התנאי מתקיים. במידה וכן, נבצע את קטע הקוד שבתוכה (גוף הלולאה). בסיום גוף הלולאה, נבדוק שוב את התנאי - במידה והוא עדיין מתקיים, נבצע את גוף הלולאה שוב.
לדוגמא, נחשב עצרת של מספר כלשהו הניתן מהמשתמש. כידוע, מתקיים עבור \(n\) שלם:
$$ n! = 1 \cdot 2 \cdot 3 \cdot … \cdot (n-1) \cdot n $$
#include <stdio.h>
int main() {
int number = -1;
scanf("%d", &number);
int i = 2, factorial = 1;
while (i <= number) {
factorial *= i++;
}
printf("%d! = %d\n", number, factorial);
}
נניח שהכנסנו לתוכנית את המספר 5. נבחן את המשתנים בכניסה לכל איטרציה של הלולאה:
i | factorial | i <= number |
|---|---|---|
| 2 | 1 | true |
| 3 | 2 | true |
| 4 | 6 | true |
| 5 | 24 | true |
| 6 | 120 | false |
אפשר גם לדוגמא להשתמש בלולאה בשביל לבצע בדיקה של נתונים מהמשתמש במקרה זה. נניח שאנחנו רוצים לבדוק שהמשתמש לא הכניס מספר שלילי - אפשר להוסיף לקוד הקודם כך:
#include <stdio.h>
int main() {
int number = -1;
while( number <= 0) {
printf("Enter a positive number\n");
scanf("%d", &number);
}
int i = 2, factorial = 1;
while(i <= number) {
factorial *= i++;
}
printf("%d! = %d\n", number, factorial);
}
כעת הלולאה תחזור על עצמה כל עוד המשתמש לא הכניס מספר חיובי. האתחול למספר שלילי במקרה זה משמש גם את המטרה הזו - לוודא שרק לאחר הכנסת מספר חיובי הלולאה תתקדם. לולאות while, בניגוד ללולאות for שנפגוש מיד, מתאימות מאוד למקרה בו אנחנו צריכים לבצע קטע קוד מספר כלשהו של פעמים שאינו ידוע מראש - בדיוק כמו במקרה הזה, בו קיימת אפשרות שמשתמש יכניס בטעות או בזדון מספר כלשהו של פעמים.
Note
ניתן באמצעות
whileליצר לולאות אינסופיות, ע״י הגדרת תנאי אמת שלא משתנה - למשל כך:
#include <stdbool.h>
while (1) {
// Infinite loop
}
while (true) {
// Infinite loop
}
בהמשך נראה כיצד ניתן לעצור לולאות אינסופיות.