המדריך השלם
 

הספרייה stdio

בפרקים קודמים הכרנו באופן שטחי את פונקצית הקלט scanf ופונקצית הפלט printf - עבור קלט ופלט סטדנדרטים מתוך הספרייה stdio . בפרק זה נכיר עוד מספר פונקציות של הספרייה stdio ובניהן:
printf ו- scanעבור קלט ופלט מובנה.
puts ו- gets עבור קלט ופלט של מחרוזות.
putchar ו- getchar עבור תווים בודדים.
כלומר בפרק זה נראה פונקציות קלט פלט אופייניות לטיפוסים ספציפיים בלבד.

פלט של תו בודד - הפונקציה ()putchar

הפונקציה ()putchar מאפשרת לנו הדפסה של תו בודד למסך.
נמחיש זאת על ידי דוגמא:
putchar('H');
פקודה זו תדפיס את התו H על המסך.
ניתן כמו כן להכניס ערך תווי לתוך משתנה ולהזין את שם המשתנה לתוך פקודת putchar ובכך יודפס ערכו של המשתנה, לדוגמא:
char ch = 'a';
putchar(a);


תבנית של הפונקציה ()putchar
putchar (char);
נכתוב תו בין גרשיים בודדים לדוגמא: 'H' אך אם נרצה להדפיס את ערכו של משתנה תווי נרשום בין הסוגריים העגולים של הפונקציה putchar ללא גרשיים בודדים או ערך asci גם ללא גרשיים.

קלט של תו בודד - הפונקציה ()getchar

הפונקציה ()getchar מאפשרת קליטה של תו בודד מיחידת הקלט הסטנדרטי (מקלדת).
בקליטת התו נרצה לשמור על ערכו ולכן נדאג שערך המוחזר על ידי הפונקציה getchar ישמר במשתנה תווי.
לדוגמא:
char c;
c = getchar();

כך שאם המשתמש הקיש H אז המשתנה c יאחסן את הערך H.

תבנית של הפונקציה ()getchar
char = getchar();
אנו נשתמש בפקודה זו רבות מכיוון שאם אנו מעוניינים לראות את הפלט של התוכנית אנו נרשום את הפקודה בסיום התוכנית ובעקבות כך התוכנית תיעצר ותחכה לקלט מהמשתמש. התוכנית לא תתקדם עד אשר היא תקבל קלט מהמשתמש ובהזדמנות זו המשתמש יכול לקרוא את הפלט של התוכנית וכשיסיים יקיש מקש כלשהו. את התו שהוקש לא נשמור במשתנה (כי ערכו לא רלוונטי לנו) .

פלט מובנה - הפונקציה ()printf

פונקציה זו מאפשרת להדפיס מספר משתנים שונים על ידי אותה פקודה (כלומר במשפט אחד).
מספר הערכים שאנו מעוניינים להדפיס יכול להשתנות, הפקודה ()printf תומכת בשינוי של מבנה הפלט בהתאם לצרכינו.
ניתן גם להדפיס מחרוזות ללא שימוש במשתנים כלשהם. במקרה כזה נרשום את המחרוזת בין מרכאות בתוך הסוגריים העגולים של הפקודה ()printf בלבד.
כזכור ניתן להוסיף לפקודת תווים שונים בהתאם לצרכינו - לדוגמא, הוספת "n\" מאפשרת מעבר לשורה חדשה וכו'.

תבנית של הפקודה ()printf :
printf (“ ….”, first_v, second_v, …, last_v);
בין המרכאות של הפקודה ()printf יש לרשום את תבנית ההמרה המתאימה לכל משתנה.

דוגמא:
int a = 3;
float b = 5.0;
long c = 8.00;
prinf(“Hello\n”);
printf(“The sum of %d %f is %ld”,a ,b, c);


קלט מובנה - הפונקציה ()scanf

פונקציה זו מאפשרת קליטה מובנת של ערכים. בעזרת פונקציה זו ניתן לקלוט מספר ערכים מטיפוסים שונים (כמו שפקודת printf() מאפשרת להדפיס מספר רב של משתנים מטיפוסים שונים). מספר הערכים שאנו מעוניינים לקלוט יכול להשתנות, הפקודה scanf() תומכת בשינוי של מבנה הקלט בהתאם לצרכינו.

תבנית של הפקודה ()scanf :
scanf("……", &addres_of_first_v, &address_of_second_v,…,&adderss_of_last_v);
בין המרכאות של הפקודה ()scanf יש לרשום את תבניות ההמרה של המשתנים, כלומר אם רוצים לקלוט משתנה מטיפוס שלם יש להוסיף בין המרכאות את תבנית ההמרה %d ולפני שמו של המשתנה יש להוסיף את אופרטור הכתובת (&)וכך לכל המשתנים. יש להקפיד על סדר כתיבת המשתנים ותבניות ההמרה.
בעצם על ידי כתיבת אופרטור הכתובת אנו דואגים להכניס את הערכים לכתובות המתאימות של המשתנים בהתאמה.

הערה: אם נשכח את האופרטור הכתובת (&) אנו עלולים לגרום לקריסת התוכנית.

דוגמא:
long num_of_course;
float grade;
long id;
printf ("Enter your num of course id number and grade \n");
scanf("%ld %ld %f", &num_of_course, &id, &grade);


נסכם:
()getchar - פונקצית קלט של תו בודד. אין להזין ערכים בין הסוגריים של הפונקציה, את הערך המוחזר (כלומר שנקלט מהמשתמש) נשמור במשתנה.
()putchar -פונקצית פלט של תו בודד. יש להזין בין הסוגריים של הפונקציה תו עם גרשיים בודדים או שם של משתנה תווי או ערך asci.
()printf- פונקצית פלט של מספר משתנים מטיפוסים שונים ומחרוזות.
()scanf - פונקצית קלט של מספר משתנים מטיפוסים שונים.

ניקוי החוצץ - הפונקציה ()flushall

חוצץ הינו קטע זיכרון המיועד לאחסנה זמנית של קלט לפני שהתוכנית מטפלת בו ולאחסנה זמנית של פלט שהתוכנית עורכת, בדרכם אל המסך או המדפסת.
כלומר, כל פעולות הקלט והפלט מתבצעות דרך חוצץ ולכן עלולים להימצא נתונים לא רצויים בחוצץ אשר עלולים לשבש את ריצת התוכנית וכדי למנוע זאת מנקים את החוצץ.
דוגמא:
char ch;
int num;
printf(“Enter your number: “);
scanf(“%d”, num);
flushall();
printf(“enter your char:”);
ch = getchar();


הערה: אם לא נרשום את הפקודה flushall() התוכנית לא תחכה לקליטת תו מהמשתמש וב-ch יהיה ערך "זבלי".

דוגמא 1:

#include <stdio.h>

void main()
{
    char ch;
    int a;

    printf("Enter value to ch ");
    ch = getchar();
    printf("\n\rThe value of ch is: ");
    putchar(ch);
    a = (int)ch;
    printf("\n\rThe value of a is: ");
    putchar(a);
    printf("\n\rChange the value of ch ");
    flushall();
    scanf("%c",ch);
    printf("\n\rThe asci value of ch is: %d",ch);
}
העבר את העכבר מעל הדוגמא כדי לראות הסבר מפורט

מבחן
© איתן 2003. כל הזכויות שמורות למערכת המידע איתן.