Как заставить программу принимать только целочисленные значения из пользовательского ввода - PullRequest
0 голосов
/ 14 июня 2019

Я создал код, который возвращает количество дней в месяце на консоль, и мне было интересно, есть ли способ, которым я могу проверить, является ли пользовательский ввод целым числом, и если это не целое число, он возвращает сообщениеговоря "ошибка, пользовательский ввод должен быть целым числом"

Это в настоящее время код, который я создал:

 using System;

 public static class GlobalMembers
{
 static int Main()
 {

    {


        Console.Write("Enter a Date to obtain how many days are in a month:");
        Console.Write("\n");
        int year = 0;
        int month = 0;
        int days = 0;
        if (month < 1 || month > 12) 
            Console.Write("Enter Year: ");
        year = Convert.ToInt32(Console.ReadLine());


        Console.Write("Enter Month Number: ");
        month = Convert.ToInt32(Console.ReadLine());


        if (month == 4 )
        {

             Console.Write("there are 30 days in the month April");
            Console.ReadLine();

        }

        if (month == 6)
        {
            Console.Write("there are 30 days in the month June");
            Console.ReadLine();


        }

        if (month == 9)
        {
            Console.Write("there are 30 days in the month September");
            Console.ReadLine();

        }


        if (month == 11)
        {
            Console.Write("there are 30 days in the month November");
            Console.ReadLine();

        }

        if (month == 1)
        {
            Console.Write("there are 31 days in the month January");
            Console.ReadLine();

        }


        if (month == 3)
        {
            Console.Write("there are 31 days in the month March");
            Console.ReadLine();

        }


        if (month == 5)
        {
            Console.Write("there are 31 days in the month May");
            Console.ReadLine();

        }


        if (month == 7)
        {

            Console.Write("there are 31 days in the month july");
            Console.ReadLine();
        }



        if (month == 8)
        {
            days = 31;
            Console.Write("there are 31 days in the month August");
            Console.ReadLine();

        }


        if (month == 10)
        {
            days = 31;
            Console.Write("there are 31 days in the month October");
            Console.ReadLine();

        }


        if (month == 12)
        {

            Console.Write("there are 31 days in the month December");
                            Console.ReadLine();

        }

        if (month < 1 || month > 12)

        {
            Console.Write("Error month range should be between 1-12");
            Console.ReadLine();
        }



        else if (month == 2)
        {
            bool leapyear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

            if (leapyear == false)
            {
                days = 28;
                Console.Write("there are 28 days in the month Febuary");
                Console.ReadLine();

            }
            else
            {
                days = 29;
                Console.Write("there are 29 days in the month Febuary due to leap year");
                Console.ReadLine();



            }
        }

        else 
        {
            days = 31; 


        }



        return days;
        }
    }
 }

Помощь будет принята с благодарностью спасибо

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Это по-прежнему позволяет пользователю вводить другие символы, но он принимает только цифры:

bool correctInput = false;
while (!correctInput) // this loop will continue until the user enters a number
{
    Console.Write("Enter Year: ");
    correctInput = int.TryParse(Console.ReadLine(), out year); // if the parsing was successful it returns true

    if (!correctInput)
    {
        Console.Write("Your input was not a number");
    }
}
0 голосов
/ 14 июня 2019

Вы можете запретить пользователю вводить строку или другой символ с этим кодом в событии нажатия клавиши текстового поля:

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
 {
 e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
 }

Также вам нужно запретить сочетания клавиш, например ctrl + v, поскольку пользователь может вставить строку в текстовое поле.Если вы хотите сделать это, щелкните текстовое поле и перейдите в свойства и измените свойство ярлыков, чтобы отключить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...