עבור לתוכן

שאלה בשפת C

Featured Replies

פורסם

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

למי שלא הבין:

המשתמש יכתוב 13245

והמסרים יקלטו מערך של נגיד [5]N

זאת אומרת ש[0]N יהיה שווה ל1 וכו' עד ל[4]N יהיה שווה 5.

אם כן איך כותבים את זה?

תודה לעוזרים!!!

:yelclap:

פורסם

תעשה לולאה שקוראת GETCH כל פעם ומכניסה את המספר הנוכחי לאיבר הבא במערך ?

פורסם

אופציה א:

מה ש-exercise אמר, אבל לזכור שאתה צריך להמיר אותם מתווים (char) למספרים. חוץ מזה, עדיף להשתמש ב-getchar או scanf.

אופציה ב:

לקלוט לתוך מספר אחד, ואז לבודד אותו לספרות באמצעות פעולות חילוק ומודולו.

פורסם
  • מחבר

אופצייה א'-

אם משתמשים בGETCH הוא מכניס את קוד הASKII של אותו מקש. ולא את המקש עצמו....

אופצייה ב'-

איך בדיוק עושים את זה?

ותודה על העזרה :)

פורסם

א. זה בדיוק מה שאמרתי. אתה צריך לדאוג להמיר אותם (ע"י חיסור '0').

ב. אתה צריך להשתמש בפעולות חילוק ומודולו (הוצאת השארית מהחילוק). לדוגמה, הפעולה i%10 מחזירה לך את שארית החילוק של i ב-10, שזה ספרת האחדות של המספר.

פורסם
  • מחבר

אוקיי הצלחתי...

לקחתי את האפשרות א'. יותר פשוטה לפי דעתי...

נ.ב

אם אני הולך לפני אפשרות ב'. ונגיד מחלק את 12345 ב1000 אז יוצא 1.2345 אז אני צריך להשתמש במשתנה מסוג CHAR בשביל שהוא יקלוט רק מספר אחר אחרי הנקודה?

ותודה על העזרה :)

פורסם

חילוק אינטג'רי של 12345 ב 1000 יתן לך 12 שלם. חילוק אינטג'רי (חילוק של משתנים מטיפוס int) יתן לך רק את החלק השלם ו"יזרוק" את השארית, גם אם היא גדולה מחצי.

פורסם

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

גם באופציה הזאת צריך להמיר מתווים למספרים.

פורסם
  • מחבר

אוקיי קצת התבלבלתי אבל עכשיו הכל מובן.

בשביל לפרק מספר למערך עושים את זה:

for (i=0;i<5;i++)
{
b[i]=n%10;
n=n/10;
}

ואז זה עובד טוב....

אופצייה ג'-

לא כל כך הבנתי למה התכוונת. בכל אופן הלכתי על אפשרות א' הכי נוח לפי דעתי.

אז עפתי למבחן :) שיהיה לי בהצלחה :silly:

פורסם

אופציה ג' דומה לאופציה א'. ההבדל הוא שבאופציה א' אתה קורא תו אחר תו, ובאופציה ג' אתה קורא את כולם במכה.

פורסם
  • מחבר

אבל אם אני משתמש בSCANF וכותב שם

 %D %D %D %D %D

אז המשתמש יצטרך ללחוץ ENTER לאחר כל מספר שהו אמכניס. וכל הרעיון שהוא יכניס מספר אחד.... או שלא הבנתי כל כך את אפשרות ג'...

נ.ב

המבחן היה קל.

פורסם

באפשרות א, הכוונה הייתה להשתמש בלולאה, ולקלוט באמצעות c% ולא d%.

באפשרות ג', הכוונה הייתה לקלוט באמצעות s% לתוך מחרוזת (מערך של char).

פורסם

אני אומר לך על דרך ג' (קליטת מחרוזת) ואז אתה בקלות לעובר עם לולאה על הקלט ופשוט עושה חיסור:

ch[i] = ch[i] -'0';

זה מכניס לך את הערך בצורת int לתוך המערך בצורה יותר יעילה כי כל תא מקבל מספר מ-0 עד 9 ו-char יותר חסכוני מ-int

int זה 8 ביט לעומת 2 ביט של ה-char

ואת הלולאה אתה ממשיך עד שאתה מוצא '\0' (סוף מחרוזת) שזה פשוט הספרה 0

whlie(ch[i] != 0)...

פורסם

int הוא 4 בתים, ו-char הוא בית אחד. אין לי מושג איך הגעת ל-8 ביט ו-2 ביט.

חוץ מזה, כשתכתוב תוכניות למערכות עם מעט מקום, אז תדאג לחסוך. אל תנסה לחסוך בזכרון כשאתה כותב תוכנית של 3 שורות.

פורסם
  • מחבר

באפשרות א, הכוונה הייתה להשתמש בלולאה, ולקלוט באמצעות c% ולא d%.

באפשרות ג', הכוונה הייתה לקלוט באמצעות s% לתוך מחרוזת (מערך של char).

אהה אוקיי..... הבנתי :)

johndou ,

לא הכי למדנו את זה...

למעשה לא למדנו את זה בכלל.

את המחרוזת הזאת...... :S

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים