יש משתנה מטיפוס char ויש משתנה מטיפוס int (הם לא כ"כ שונים זה מזה, אבל לא ניכנס כרגע לדיון). אני אתן לך הסבר קצר, כללי, פשוט (ולכן אולי לא הכי מדוייק) על מה קורה.
אם אתה רוצה תו בודד, אתה תרשום char c = 10 וכאשר תדפיס אתה תבצע למשל:
printf("Character Test Hello %c World", c);
בבואו של הקומפיילר ל-%c, הוא ישערך את c באופן תווי, כלומר הוא ילך לייצוג האסקי של המספר 10 ויבין שבעת ההדפסה הוא צריך לשערך את c כשורה רווח.
אם אתה רוצה להדפיס את המספר 10, אתה תרשום int i = 10 ופקודה:
printf("Integer Test Hello %d World", i);
יודפס על המסך מן הסתם:
Integer Test Hello 10 World
זה כי הוא מתייחס במקרה זה לערך c כאל ערך נומרי שלם.
אפשר כמובן לשחק ולנסות להדפיס %d את char c או %c את int i ולראות מה יקרה (אתה מוזמן לנסות בעצמך, להחכים קצת ולהבין למה זה קורה).
אני אחתום את הדיון בלמה זה ככה? הסיבה היא פשוטה. יש תקנים שונים בתורת האינפורמציה לדרך ייצוג של אותיות וסימנים מיוחדים. אחד התקנים הוא תקן ה-ASCII שכמו שבמקלדת החליטו על תקן QWERTY (מישהו ניסה אגב תמורה אחרת של אותיות המקלדת? יש אנשים שטוענים לתקן נוח יותר זאת חוויה מגניבה ליצור מקלדת חדשה
). אם תיכנס לטבלת אסקי תגלה שהמספר 10 בייצוג דצימלי מציין בטבלת האסקי את הסימבול המורה לרדת שורה. מכיוון ש-C שפה פשוטה ויחסית נמוכה, היא עוצבה בצורה כזאת שאתה יכול להזין לתוך משתנה מטיפוס char פשוט את הערך האסקי (ויותר מזה, משתנה מטיפוס char הוא למעשה משתנה בגודל 1byte אשר מספיק ל-127 הסימבולים השונים בטבלת האסקי).
זה היה על קצת המזלג, אבל מקווה שזה נתן לך קצת תובנה.
