שאלה של מתחילים לגבי switch

ndsman

New member
שאלה של מתחילים לגבי switch

אני בא מvb.netֿֿ/vbscript קצת שונה מכם אבל גם אותם למדתי לבד. בכל אופן בשפות הללו הswitch הוא select case ואז אני יכול לכתוב:ֿ select case true case x=>0 and x<10 bla bla case x=> 10 and x=<20 blabla end select ניסיתי switch 1 } :case x=>0 && x<10 bla bla; break; וכו' ניסיתי לשים בסוגריים וכאלה אבל אני כנראה מפספס משהו. אני מקבל /error: case label does not reduce to an integer constant X הוא int: int x; x= [value.text intValue]; בקיצור איך בודקים בswitch מצב של true? אני יודע שאפשר לעשות את זה בקלות עם if אבל אני בשלבי למידה ולכן העקשנות. תודה מראש על העזרה
 

BravoMan

Active member
זה לחלוטין לא עובד ככה.

ה-switch ב-Objective-C עובד בצורה שונה. הוא אינו בודק תנאים, אלא משווה תוכן של משתנה נתון מול מספר קבועים אפשריים. הנה דוגמה:
int menu; switch (menu) { case 1: /* do some stuff for option 1 */ break; case 2: /* do some stuff for option 2 */ break; default: /* some option we did not plan to handle */​
איני מכיר VBA או VB .NET, אבל נראה ששם זה עובד הפוך. בודקים תוצאה מול תנאים במקום משתנה (או ביטוי) מול תוצאות. כמה דברים לשים לב עליהם: הערך של כל case חייב להיות קבוע. משפט ה-case מתפקד בצורה זהה כמעת לתווית בקוד עליה עוברים עם פקודה goto. הסעיף default הוא אופציונלי ונועד לתפוס כל ערך לא צפוי שעשוי להיות במשתנה גם break הוא אופציונלי ואם מוותרים עליו הביצוע ימשיך לפקודות הבאות עד סוף הבלוק של ה-case.
 

ndsman

New member
תודה על התגובה, האם יש משהו אחר דומה ל

select case? או שעדיף פשוט לעבוד עם if ו else ?
 

BravoMan

Active member
לא כפי שאתה מתאר אותם.

אבל אם ניקח את המקרה הספציפי שהבאת בתור דוגמה, ניתן לכתוב אותו כך:
int x = 0; switch (x / 10) { case 0: /* x >= 0 && x < 10 */ ... case 1: /* x >= 10 && x < 20 */ ... }​
 
למעלה