פורסם 2006 בנובמבר 2519 שנים יש לי תוכנה שהאופציות בה פועלות לפי Charים. אבל עם מכניסים קלט ריק (כלומר לReadline פשוט לוחצים אנטר) אז היא קורסת. איך מתעלמים מקלט ריק כזה? תודה
פורסם 2006 בנובמבר 2619 שנים בעיקרון אתה צריך לבדוק אם הוא ריק לפני שאתה מבצע את הפעולות שאתה רוצה לעשות.נוכל לעזור לך יותר אם תעלה את הקטע בקוד שלך שעליו אתה מדבר.
פורסם 2006 בנובמבר 2619 שנים מחבר הקוד ארוך..הנה דוגמא פשוטה.int a=int.parse(console.readline());אם לוחצים אנטר בקטע כזה התוכנה קורסת...איך מונעים את זה?
פורסם 2006 בנובמבר 2619 שנים אם אתה רוצה לבדוק רק אם המחרוזת ריקה אתה יכול להשתמש במתודה IsNullOrEmpty שנמצאת ב string:string input = Console.ReadLine();int option;if(!string.IsNullOrEmpty(input)) option = int.Parse(input);אם אתה רוצה לבדוק באופן כללי אם הקלט הוא מספר חוקי ולא רק אם הוא ריק אתה יכול להשתמש ב TryParse שלא זורקת Exception אלא מחזירה boolean שמציין אם ההמרה הצליחה:string input = Console.ReadLine();int option;if(!int.TryParse(input, out option)) Console.WriteLine("Error: Invalid input");
פורסם 2006 בדצמבר 1118 שנים אני יודע שהנושא לא פעיל כבר יותר משבוע אבל רציתי להציע עוד שיטה לבדיקת התקינות של הקלט.אפשר גם לעשות את זה בצורה הבאה:try { input=int.parse(Console.ReadLine()); }catch (FormatException) { Console.WriteLine("Incorrect input"); } input=1;//end tryמה שזה עושה למעשה זה:ה IDE ינסה להמיר את הקלט ל INT,אם הוא לא יצליח כי הקלט לא חוקי (אות, רווח או כל דבר אחר שבוא לא מספר) אז הוא יגיד למשתמש שהקלט לא חוקי ויקבע ערך מסוים לקלט(כמובן שאת הערך הזה אפשר לשנות או לא לשים בכלל ערך)את ה {}try אפשר לשים תמיד מסביב לקוד שחושבים שהוא בעייתי.ה catch מתאר אילו פקודות יתבצעו אם הקלט הוא לא חוקי.
פורסם 2006 בדצמבר 1118 שנים זה בדיוק מה ששניצל כתב:אפשר כמובן גם סתם להשתמש ב-parse, אבל לעטוף אותו ב-try/catch.אבל השיטות האחרות עדיפות. שימוש ב exceptions בשביל לשלוט בזרימת הקוד נחשבת להרגל רע. זריקת exception איטית יחסית ולכן צריך להשתמש בה רק במקרים חריגים באמת (מכאן שמה) ולא להיות "עצלנים" ולהשתמש בהן כשיש אפשרות אחרת.
פורסם 2006 בדצמבר 1118 שנים זה בדיוק מה ששניצל כתב:אבל השיטות האחרות עדיפות. שימוש ב exceptions בשביל לשלוט בזרימת הקוד נחשבת להרגל רע. זריקת exception איטית יחסית ולכן צריך להשתמש בה רק במקרים חריגים באמת (מכאן שמה) ולא להיות "עצלנים" ולהשתמש בהן כשיש אפשרות אחרת.אני מסכים לגמרי, אבל במקרה הזה (בהנחה שהקלט הוא באמת מהמשתמש, וב- try יש רצף של פעולות שיכולות להיכשל) זה סביר לגמרי להשתמש ב- exceptions, ונותן קוד הרבה יותר ברור.כשמדובר בתגובה לפעולה של המשתמש, ההבדל בביצועים בין שימוש ב- exception לשיטה ה"קלאסית" זניח לגמרי.
פורסם 2006 בדצמבר 1118 שנים צודק, למרות שבמקרה הספציפי הזה יש TryParse כחלופה שלדעתי פשוטה באותה מידה.
פורסם 2006 בדצמבר 1318 שנים לדעתי לא מומלץ להשתמש ב-exceptions בשביל flow control.זה יוצר קוד לא קריא במיוחד, כי אתה לא יודע אם ה-exception שנזרק אמור היה להיזרק, או שזה סימן לשגיאה כלשהי.בנוסף, זה יכול להפריע לדיבאגרים מסויימים (ב-Visual Studio אפשר לומר לו לעצור על כל exception, אז הוא גם יעצור על זה למרות שאין צורך).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.