עבור לתוכן

שאלה לגבי קוד ב-C, מערך תוים

Featured Replies

פורסם

צהריים טובים,

אני מקבל מערך תוים בעזרת getchar שבסופו שורה חדשה n\ אני מעוניין לבדוק שכל התוים הם מספרים ושהתו הראשון הוא לא n\


for (i=0;i<numsize;i++)
{
if ((arr[i]<'0')||(arr[i]>'9')||(arr[0]=='\n'))
return -1;

לגבי הבדיקה של האם הקלט הוא מספר זה בסדר ומודפסת לי הודעה שגיאה במקרה הצורך, אך אם התו הראשון הוא n\ אז כלום לא קורה.

בעיה נוספת:

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

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

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

תודה מראש

פורסם

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

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

לגבי הבעיה השניה, תשתמש בפונקציה fflush על מנת לאפס את הקלט בין שני המערכים.

פורסם
  • מחבר

שלום שניצל תודה על תגובתך,

אני אכן בסביבת windows אך סוף השורה מסומנת ע"י n\.

נראה לי שהבנתי מה הייתה הבעיה: קליטת המערך נעשתה בעזרת לולאה שאחד התנאים הוא שהתו לא שווה ל-n\ ולכן השמת התו בתוך תא במערך לא התבצעה כאשר התו שווה ל-n\ ולכן התאים תמיד היו שונים מ-n\.. אני אבדוק זאת.

אני חושב שזה יפתור גם את המקרה השני.

בכל מקרה אני חושב שלא הבהרתי את עצמי, מה שרציתי הוא להציג הודעת שגיאה כאשר הקלט חורג מגודל המערך וכך להכריח את המשתמש להקיש שורה חדשה בסוף כל מערך.

בכל מקרה תודה לך על עזרתך שניצל.

פורסם
  • מחבר

בעת בדיקת הקלט של התו האחרון מופיעה לי שגיאת זמן הריצה הבאה:

"Stack around the variable 'num1' iwas corrupted"

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

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

פורסם

נשמע כאילו יש לך דריכת זיכרון. מומלץ שתעלה את כל הקוד הרלוונטי כדי שנוכל לראות מה הבעיה.

ארכיון

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

דיונים חדשים