קריאת קלט מהמשתמש עם scanf
השתמשנו בפונקציה זו כבר, כעת נגדיר אותה בצורה מסודרת. הפונקציה קוראת ערכים לתוך משתנים הניתנים לה עם מזהים בדומה ל-printf. למשל:
int n;
scanf("%d", &n);
הפונקציה תציג למשתמש סמן מהבהב כשתתחיל ותחכה לקלט שלו. המזהה d% אומר לפונקציה שאנחנו מצפים למשתנה אחד מסוג int. המשתמש יכניס קלט ולאחר שילחץ על enter הפונקציה תנסה לעבד את הקלט שלו ולכתוב את התוצאה למשתנה n. שימו לב ל-& לפני n בקריאה לפונקציה - הוא חובה! בהמשך נראה מדוע ומה תפקידו.
אפשר לקרוא כמה משתנים מאותה שורה שהכניס המשתמש בצורה הבאה:
char c1, c2;
scanf("%c%c", &c1, &c2);
הערה: נניח שציפינו לקבל מהמשתמש מספר:
int n;
scanf("%d", &n);
אבל הוא הכניס משהו שאינו מספר, למשל כתב hello ואז enter. מה יקרה? הפונקציה תכשל במקרה זה - היא לא תצליח לכתוב למשתנה שלנו את התוצאה. איך נדע אם זה המצב?
בהמשך נגדיר זאת מפורשות, אבל בפשטות כרגע - פונקציות בשפת C מחזירות ערך, בדומה לפונקציות מתמטיות. scanf מחזירה את מספר הביטויים שהצליחה לקרוא מתוך הקלט של המשתמש. לכן אינטואיטיבית ניתן לכתוב משהו בסגנון הזה:
int n;
int result = scanf("%d", &n);
if (result != 1) {
// ...
}
כאשר בהמשך נגדיר את כל החלקים שמופיעים בקטע הזה בצורה מסודרת.
לאורך רוב הדוגמאות בקורס אנחנו נניח כי הקלט ש-scanf מקבלת תקין, אבל באופן כללי יש לבדוק את ערך ההחזרה שלה.