logo

ההבדל בין printf() ל-scanf() ב-C

מבוא:

Printf() ו Scanf() הן פונקציות ספרייה מובנות בשפת C שמבצעות קלט מעוצב ו פלט מעוצב פונקציות. פונקציות אלו מוגדרות ומוצהרות ב קובץ הכותרות stdio.h . ה 'ו' ב printf ו scanf מייצג 'מעוצב' . אז, שתי הפונקציות printf() ו scanf() השתמש בקודים בתוך מחרוזת פורמט כדי לציין כיצד יש לעצב ערכי פלט או קלט. עלינו לייבא את קובץ הכותרת לשימוש printf() ו scanf() :

 #include 

במאמר זה, נדון בהבדל בין printf() ל-scanf(), אך לפני שנדון בהבדלים, עלינו לדעת על ה-printf() ו- scanf() עם התחביר והדוגמאות שלהם.

Printf():

זה הדפסים כל דבר שביניהם מרכאות כפולות עם מפרטי פורמט %c, %d,%f, וכו', כדי להראות ערך של משתנה או קבוע ויכולים להיות גם תווי רצף בריחה כמו , ל שורה חדשה, ו לשונית אופקית , בהתאמה.

תרשים ספרות רומיות 1 100

תחביר:

 printf('(string) %format_specifier (string)',variable); 

Scanf():

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

תחביר:

 scanf(%format_specifier, &pointer_to_variable); 

מחרוזת מפרט פורמט:

בפרמטר הראשון של printf ו scanf , אנחנו עוברים מחרוזת פורמט אוֹ מחרוזת מפרט פורמט , ואנו מציינים איזה סוג ערך המשתמש הולך להזין.

סוג מידע הֲמָרָה מחרוזת פורמט
מספר שלם מספר שלם קצר %d או % i
קצר ללא חתימה % ב
חתום ארוך % ld
מזמן לא חתום % lu
הקסדצימלי ללא סימן % איקס
אוקטלי לא חתום %O
אמיתי לָצוּף % f או % g
לְהַכפִּיל %lf
דמות חתומה %c
char לא חתום %c
חוּט %s

לדוגמה, אם משתמש נכנס עשרים כקלט, כמו עשרים הוא ערך מספר שלם עשרוני , אנו מציינים את כל ערכי המספרים השלמים העשרוניים ב-C באמצעות ה- מפרט פורמט %d . באופן דומה, ערכים צפים מצוינים באמצעות %f .

קוד בסיסי עבור Printf() ו-Scanf():

דוגמה 1:

 #include int main() { int a, b; int sum = 0, sub = 0, mul = 0; printf('Please enter the two values:'); /* Read input */ scanf('%d%d', &a, &b); sum = a+b; sub = a-b; mul = a*b; /* Print output */ printf('The sum = %d 
sub = %d 
mul = %d', sum, sub, mul); return 0; } 

תְפוּקָה:

המרת nfa ל-dfa
 Please enter the two values:8 6 The sum = 14 sub = 2 mul = 48 

הֶסבֵּר:

בתוכנית לעיל, אנו משתמשים ב- scanf() כדי לקרוא את הקלט מהמסוף ולאחסן אותם במשתנים a & b. לאחר מכן, אנו מבצעים פעולות אריתמטיות כמו חיבור , חִסוּר , ו כֶּפֶל ובהמשך לאחסן את התוצאות ב- שלושה משתנים חדשים (Sum, Sub, Mul). לבסוף, על ידי שימוש ב- הפונקציה printf() , אנו מדפיסים את התוצאות.

דוגמה 2:-

 #include int main() { int a; scanf('%d %d', &a); printf('Execution finished...'); return 0; } 

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

דוגמה 3:

 int main() { int a, b; scanf('%d', &a, &b); printf('Execution finished...'); return 0; } 

תְפוּקָה:

 5 Execution finished... 

הֶסבֵּר:

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

דוגמה 4:

 #include int main() { int a; scanf('%d', a); printf('Execution finished'); } 

תְפוּקָה:

 6 Segmentation fault 

הֶסבֵּר:

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

aws היסט לאדום

דוגמה 5:

 #include int main() { int a = 10; int b = 20; printf('the value of a = %d, the value of b = %d', a, b); } 

תְפוּקָה:

 the value of a = 10, the value of b = 20 

הֶסבֵּר:

בתוכנית לעיל, מתי printf סורק את מחרוזת הפורמט, היא תחליף את מפרטי פורמט (%d) עם הערכים האמיתיים שאליהם אנו עוברים printf() . כלומר, מפרט הפורמט הראשון יוחלף בערך הראשון שנעביר printf(), וכולי.

הבדלים בסיסיים בין Printf() ל-Scanf()

כמה הבדלים בין printf ל-scanf הם:

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