【问题标题】:I am having trouble sanitizing the User Input for a string我在清理字符串的用户输入时遇到问题
【发布时间】:2021-03-12 15:07:57
【问题描述】:

我目前正在做一个基本的 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;
            }
        }
    }

【问题讨论】:

  • 查看Int.TryParse 作为您当前拥有的方式,如果用户输入的不是数字,它会抛出。 TBH,我会在 Sanitize 例程中进行此检查并完成它。
  • 感谢您的帮助!
  • 不客气,如果您对此仍有疑问,请更新您的帖子,有人会很乐意为您提供帮助。

标签: c# sanitization


【解决方案1】:

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

你可以 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;
        }

【讨论】:

  • 我绝对会推荐Int32.TryParse() 而不是try catch。在控制流中使用异常通常被认为是不好的形式。
猜你喜欢
  • 2018-12-09
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2022-01-12
相关资源
最近更新 更多