ABA


"שאלה לגבי תווים מיוחדים בשפת C..."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10031 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10031
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   18:37   19.08.10   
אל הפורום  
  שאלה לגבי תווים מיוחדים בשפת C...  
 
   שלום במדריך שאני לומד ממנו ישנה טבלה המסבירה כי המספרים ע"פ ASCII
הם בעצם Char.
מה שקורה הוא כך:
האות a שווה ל 97 במספרים.
אז עשיתי דבר כזה:
#include <stdio.h>
int main()
char dvir='a';
printf("%d", dvir);

ובאמת קיבלתי את המספר 97, אבל כשרציתי לעשות את ההמרה ההפוכה לא קיבלתי זאת:
#include <stdio.h>
int main()
char dvir='97'
printf("%c",char);
לא קיבלתי את האות a, למה זה?!

ושאלה נוספת היא מהי הטבלה הבאה ומה השימושים שלה?

תודה רבה


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  כבר לא זוכר כל כך C אבל נראה לי בגלל שעשית Nesher  19.08.10 18:40 1
     ניסתי זה נתן לי את המספר 7 וסיים את התוכנית dvir8 19.08.10 18:45 2
     הפיתרון השני עובד, תודה חבר! dvir8 19.08.10 18:45 3
         סתם מספרת לך על כל מיני תווים מיוחדים בC... ג'וני הקטן 19.08.10 19:06 4
  מכתב Deuce  19.08.10 19:12 5
     הבנתי... למה עשו את זה אתה יודע? או שזה תוצר לואי? dvir8 19.08.10 22:38 6
         תוצר לוואי? בכלל לא ronen333  20.08.10 02:03 7
         בוא נעשה הפרדה. Deuce  20.08.10 04:23 8
             הבנתי, תודה...תאכלס שימוש נחוץ אין בזה נכון? dvir8 20.08.10 13:23 9
                 אין לך בשביל מה לעבוד עם מספרים D-KinG 20.08.10 13:34 10

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   18:40   19.08.10   
אל הפורום  
  1. כבר לא זוכר כל כך C אבל נראה לי בגלל שעשית  
בתגובה להודעה מספר 0
 
ב-printf במקום char היית צריך לרשום dvir

ואם זה לא שינה אז תנסה במקום זה
char dvir='97';
לשים את זה
int dvir = 97;


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   18:45   19.08.10   
אל הפורום  
  2. ניסתי זה נתן לי את המספר 7 וסיים את התוכנית  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   18:45   19.08.10   
אל הפורום  
  3. הפיתרון השני עובד, תודה חבר!  
בתגובה להודעה מספר 1
 
   לגבי הטבלה יש לך מושג מהי אומרת?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ג'וני הקטן
חבר מתאריך 24.6.10
1166 הודעות
   19:06   19.08.10   
אל הפורום  
  4. סתם מספרת לך על כל מיני תווים מיוחדים בC...  
בתגובה להודעה מספר 3
 
   לדוגמא \0 זה תו שמייצג סוף מחרוזת... אז כתוב שהערך שלו הוא 0...
\n זה לרדת שורה.. הערך שלו הוא 10... זה הכל חח


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   19:12   19.08.10   
אל הפורום  
  5. מכתב  
בתגובה להודעה מספר 0
 
ראשית הדפסת את char ולא את המשתנה dvir. דבר שני, הזנת לתוך המשתנה dvir את '97' ולא את 97. ההשמה צריכה להיות ממש בצורה הבאה:
char dvir = 97;

לגבי הטבלה - יש סימנים מיוחדים, למשל כאשר אתה רוצה להדפיס שורה אתה רושם:

printf"Hello \n World");

הנ"ל ידפיס Hello שורה רווח World.

באופן דומה כדי להדפיס תווים מיוחדים אפשר או להזין לתוך משתנים "\n" או "\i" וכו' או להזין את הערכים המספריים, כלומר dvir = 10 ידפיס לך שורה רווח כאשר תדפיס את dvir.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   22:38   19.08.10   
אל הפורום  
  6. הבנתי... למה עשו את זה אתה יודע? או שזה תוצר לואי?  
בתגובה להודעה מספר 5
 
   אם למשל אני רוצה באמת לרשום שהמשתנה דביר = 10
אז הוא ירד שורה בכל זאת?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   02:03   20.08.10   
אל הפורום  
  7. תוצר לוואי? בכלל לא  
בתגובה להודעה מספר 6
 
   פשוט כל דבר מיוצג ע"י מספרים...

אבל יש שפות שעושות הפרדה לוגית בין תו למספר על מנת למנוע טעויות לוגיות.. כגון C# (ששם אתה חייב לעשות המרה על מנת שתוכל לראות מספר כתו).

אבל בכולם היצוג הוא ע"י מספר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   04:23   20.08.10   
אל הפורום  
  8. בוא נעשה הפרדה.  
בתגובה להודעה מספר 6
 
יש משתנה מטיפוס 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 הסימבולים השונים בטבלת האסקי).

זה היה על קצת המזלג, אבל מקווה שזה נתן לך קצת תובנה.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dvir8
חבר מתאריך 13.5.02
5929 הודעות
   13:23   20.08.10   
אל הפורום  
  9. הבנתי, תודה...תאכלס שימוש נחוץ אין בזה נכון?  
בתגובה להודעה מספר 8
 
   זאת אומרת עדיף להשתמש ב \n מאשר char = 10 או שיש לזה מצבים שעדיף להשתמש בצ'אר?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   13:34   20.08.10   
אל הפורום  
  10. אין לך בשביל מה לעבוד עם מספרים  
בתגובה להודעה מספר 9
 
   אבל לעומת זאת אתה כן יכול לשחק עם הערכים שלהם לצרכים שלך
למשל אם יש לך איזשהו char שמייצג אות קטנה ותרצה להדפיס את האות הגדולה שלו
אז תוסיף לו 'A'-'a', כל מיני דברים כאלה...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net