שאלה על משפטי switch - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה על משפטי switch


eliorws

Recommended Posts

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

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

אם יש סיבה אחרת לשימוש ברווח אשמח לשמוע.

עריכה: אני רואה ש Access denied המליץ גם על זה.

קישור לתוכן
שתף באתרים אחרים

רק שניקוי ה stdin זה גם דבר שאינו תקני (כן, גם אני מאוד הופתעתי) ועובד רק בחלק מהקומפיילרים (כן, אין דרך סטנדרטית לנקות את ה-buffer). אפשר לפתור את זה בקלות ע"י לולאה פשוטה, או פשוט לכתוב הערות בקוד, שידגישו את הרווח הזה.

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

קישור לתוכן
שתף באתרים אחרים

יש פיתרון מעניין לבעיה שיגאל מעלה אפשר לרשום משהו כזה:

scanf(" " "%c",&G);

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

שלב הבא: ניתן לשלב מאקרו כך



#define SKIP_WHITESPACES " "
scanf(SKIP_WHITESPACES "%c",&G);

קישור לתוכן
שתף באתרים אחרים

רק שניקוי ה stdin זה גם דבר שאינו תקני (כן, גם אני מאוד הופתעתי)

מאיפה הביסוס שלך לזה בדיוק? הסתכלתי בוויקיפדיה בעמוד https://en.wikipedia.org/wiki/ANSI_C

ומהלינקים שם בסוף יש טיוטה של התקן משנת 1988: http://flash-gordon.me.uk/ansi.c.txt

ו-fflush מוזכר שם. אם יש קומפיילר שלא ממש אותו אז הוא לא מממש את התקן.

קישור לתוכן
שתף באתרים אחרים

לא אמרתי ש-fflush לא תקני, אמרתי ש-(fflush(stdin לא תקני.

ציטוט מתוך התקן שקישרת אליו:

4.9.5.2 The fflush function

If stream points to an output stream or an update stream in which

the most recent operation was output, the fflush function causes any

unwritten data for that stream to be delivered to the host environment

to be written to the file; otherwise, the behavior is undefined.

ובסוף המסמך, תחת הכותרת "Undefined behavior":

* The stream for the fflush function points to an input stream or to

an update stream in which the most recent operation was input

($4.9.5.2).

דהיינו, הפעולה לא מוגדרת עבור input stream.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...