Menu
Coddy logo textTech

קלט מחרוזת באמצעות scanf

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 14 מתוך 63.

עכשיו, אחרי שהבנת איך מחרוזות פועלות עם תו הסיום null, הגיע הזמן ללמוד איך לקבל קלט של מחרוזות ממשתמשים. הפונקציה scanf יכולה לקרוא מחרוזות באמצעות מציין הפורמט %s, אבל יש לה מגבלות חשובות שחשוב להבין.

כדי לקרוא מחרוזת באמצעות scanf, משתמשים בתבנית %s ומעבירים את השם של מערך התווים (בלי האופרטור &, מכיוון ששמות של מערכים הם כבר כתובות):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

עם זאת, ל-scanf("%s", ...) יש מגבלה קריטית: הוא מפסיק לקרוא ברגע שהוא נתקל בתו רווח לבן כלשהו (רווח, טאב או שורה חדשה). כלומר, אם משתמש מקליד "Hello World",‏ scanf ילכוד רק את "Hello" וישאיר את "World" במאגר הקלט.

חשש רציני נוסף הוא ש־scanf לא בודקת אם הקלט נכנס למערך שלך. אם מישהו יזין מילה ארוכה יותר ממה שהמערך שלך יכול להכיל, הדבר יגרום לגלישת מאגר, שעלולה לגרום לקריסת התוכנית שלך או ליצור פרצות אבטחה. הקפד תמיד שמערך התווים שלך יהיה גדול מספיק עבור הקלט הצפוי.

למרות המגבלות האלה, scanf("%s", ...) מתאימה בהחלט לקריאת מילים בודדות, וזה בדיוק מה שתתרגלו באתגר הבא.

challenge icon

אתגר

קל

כתוב תוכנית C שמדגימה קריאת קלט של מחרוזות מהמשתמש באמצעות scanf והצגתו בחזרה. התוכנית שלך צריכה:

  1. להכריז על מערך תווים בשם username עם 30 איברים כדי לאחסן את קלט המשתמש
  2. להכריז על מערך תווים בשם hobby עם 25 איברים כדי לאחסן קלט נוסף
  3. להשתמש ב-printf כדי להציג למשתמש את ההודעה "Enter your username:"
  4. להשתמש ב-scanf עם מציין הפורמט %s כדי לקרוא את שם המשתמש לתוך מערך username
  5. להשתמש ב-printf כדי להציג למשתמש את ההודעה "Enter your hobby:"
  6. להשתמש ב-scanf עם מציין הפורמט %s כדי לקרוא את התחביב לתוך מערך hobby
  7. להדפיס את שתי המחרוזות באמצעות printf בדיוק בפורמט שמוצג למטה

הקלט יסופק כשתי מילים נפרדות (ללא רווחים בתוך כל מילה).

הפלט שלך צריך להציג את התוצאות בפורמט הבא:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

לדוגמה, אם המשתמש מזין את "Alice" כשם המשתמש ואת "reading" כתחביב, הפלט צריך להיות:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

האתגר הזה בודק את ההבנה שלך בשימוש ב-scanf עם מציין הפורמט %s לקריאת קלט של מחרוזת, בהכרזה נכונה על מערך תווים בגודל מספיק, ובשילוב קלט המשתמש עם פלט מעוצב באמצעות printf.

נסו בעצמכם

#include <stdio.h>

int main() {
    // TODO: הגדירו כאן את מערכי התווים שלכם
    
    // TODO: כתבו כאן את הקוד שלכם להצגת בקשה לקלט ולקריאת הקלט
    
    // TODO: הדפיסו את הודעת הפלט הסופית
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C אונליין