יום שבת, 18 בנובמבר 2017

פונקציה נחמדה שכתבתי לקליטה בטוחה של מספר שלם מהמשתמש

הפונקציה כתובה כאן ב-#C, אבל תוכלו להמיר אותה עם קצת מחשבה לכל שפה.
אגב, בחלק מהתוכניות בבלוג כבר עשינו בה שימוש.

קליטה בטוחה של מספר int מהמשתמש:

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

הערה: הפונקציה Get_Save_int_Number_From_User נכתבה במקור עבור שפת C, כנראה תמצאו בה דברים שאפשר לקצר באמצעות #C.
בניגוד אליה, הפונקציה Get_Save_int_Numbers_From_User נכתבה ישירות עבור #C.








- זו המחלקה שיש להוסיף לתוכנית שלכם:












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

דוגמה 1 - קליטת מספר אחד מהמשתמש:
    class Program
    {
        static void Main(string[] args)
        {
            int x;
            x = UsefulTools.Get_Save_int_Number_From_User("Enter number:");
            Console.WriteLine(x);
        }
    }






דוגמה 2 - קליטת מספר אחד מהמשתמש עם ערכי מינימום ומקסימום:
    class Program
    {
        static void Main(string[] args)
        {
            int x;
            x = UsefulTools.Get_Save_int_Number_From_User("Enter number (1-10):", 1, 10);
            Console.WriteLine(x);
        }
    }






דוגמה 3 - קליטת הרבה מספרים מהמשתמש (תמיד עם ערכי מינימום ומקסימום):
אגב: כאן עושים שימוש בפונקציה Get_Save_int_Numbers_From_User. פונקציה זו מקבלת מערך ומכניסה אליו את הערכים מהמשתמש, לפי אורך המערך.

[ולמה האריכות של שימוש במערך, במקום שימוש ב-ref ?
זאת משום שרצינו שהפונקציה תוכל לקבל כל כמות של משתנים מהמשתמש ולהשפיע עליהם.
בהתחשב בכך שבשפת #C אין מצביעים - בלי מערך היינו צריכים לקבל בפונקציה את הפרמטר: params ref int[] List
אבל שילוב של params ו-ref לא חוקי ב-#C! (בניגוד ל-C). ]


    class Program
    {
        static void Main(string[] args)
        {
            int[] Array = new int[4];
            UsefulTools.Get_Save_int_Numbers_From_User("Enter 4 numbers (1-10):", 1, 10, Array);
 
            for (int i = 0; i < Array.Length; i++)
            {
                Console.WriteLine(Array[i]);
            }
        }
    }













עריכה:
ב #C קיימת הפונקציה המובנת "()Int32.TryParse" שעושה את רוב מה שעשינו בכוחות עצמה.

שימוש:
    class Program
    {
        public static int GetSaveINT(String str)
        {
            int number;
            Console.Write(str);
            while (!Int32.TryParse(Console.ReadLine(), out number))
            {
                Console.Write(str);
            }
            return number;
        }
        static void Main()
        {
            int number = GetSaveINT("Enter number: ");
            Console.WriteLine("Your number is: " + number);
        }
    }






תיהנו!

אין תגובות:

הוסף רשומת תגובה