首页 > 解决方案 > 我在清理字符串的用户输入时遇到问题

问题描述

我目前正在做一个基本的 RNG 程序,但在消毒时遇到了麻烦。我在编程方面很糟糕,所以我可能会遗漏一些东西,但我不知道如何确保用户没有输入字符串。我的问题出在代码底部的最后一个 if 语句中。任何帮助将不胜感激!这是代码:

    using System;

    namespace Lab_9
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Declaring range for RNG
                int minValue = 1;
                int maxValue = 10;

                //Creating RNG
                Random random = new Random();
                int number = random.Next(minValue, maxValue);

                //Getting user int
                Console.WriteLine("Please guess a number between 1-10");
                int UserInput = Convert.ToInt32(Console.ReadLine());
                bool validInput = Sanitize(UserInput);

                //Checking if their number is greater than the RNG Number
                if (UserInput > number)
                {
                    Console.WriteLine("Your number is more than the generated number");
                }
                //Checking if it is smaller
                if (UserInput < number)
                {
                    Console.WriteLine("Your number is less than the generated number");
                }
                //Checking if they guessed the right number
                if (UserInput == number)
                {
                    Console.WriteLine("Congrats! You guessed the number!");
                }

                Console.WriteLine("The random number was " + number);
            }

            //Sanitizing their input
            private static bool Sanitize(int UserInput)
            {
                //Checks for invalid numbers
                if(UserInput > 10)
                {
                    Console.WriteLine("Please do not enter a number that is greater than 10");
                    return false;
                }

                if(UserInput < 1)
                {
                    Console.WriteLine("Please do not enter a number that is less than 1");
                    return false;
                }

                //Checking if they put chars instead of numbers
                if()
                {
                    Console.WriteLine("Please do not enter a letter, only a number");
                    return false;
                }
                return true;
            }
        }
    }

标签: c#sanitization

解决方案


有一些方法可以做到这一点

你可以 int.TryParse() 或者你可以只使用 try catch。如果不是 Int 则会抛出异常

        static void Main(string[] args)
        {
            //Declaring range for RNG
            int minValue = 1;
            int maxValue = 10;

            //Creating RNG
            Random random = new Random();
            int number = random.Next(minValue, maxValue);

            //Getting user int
            Console.WriteLine("Please guess a number between 1-10");
            int UserInput = Sanitize(Console.ReadLine());

            if(UserInput == 0)
            {
                return;
            }
            //Checking if their number is greater than the RNG Number
            if (UserInput > number)
            {
                Console.WriteLine("Your number is more than the generated number");
            }
            //Checking if it is smaller
            if (UserInput < number)
            {
                Console.WriteLine("Your number is less than the generated number");
            }
            //Checking if they guessed the right number
            if (UserInput == number)
            {
                Console.WriteLine("Congrats! You guessed the number!");
            }

            Console.WriteLine("The random number was " + number);

        }

        private static int Sanitize(object input)
        {
            int userInput = default;

            try
            {
                userInput = Convert.ToInt32(input);
            }
            catch (Exception ex)
            {
                //Checking if they put chars instead of numbers
                Console.WriteLine("Please do not enter a letter, only a number");
            }


            //Checks for invalid numbers
            if (userInput > 10)
            {
                Console.WriteLine("Please do not enter a number that is greater than 10");
            }

            if (userInput < 1)
            {
                Console.WriteLine("Please do not enter a number that is less than 1");
            }
            return userInput;
        }

推荐阅读