c# - 我在清理字符串的用户输入时遇到问题
问题描述
我目前正在做一个基本的 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() 或者你可以只使用 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;
}
推荐阅读
- python - 如何解决学生标记仪表板的各种问题 - 我们不能在 python 中使用简单的代码来解决这个问题..?
- python - 将 Azure 函数与 SharePoint 结合使用
- c++ - C ++,SFML - 按钮:如何制作存储指向其他类方法的指针的按钮?
- swift - 如何在swift中将php日期字符串转换为日期
- mysql - MySQL Workbench 报告 SELECT is not valid at this position for this server version”错误
- python - Pytorch“upsample_bilinear2d_out_frame”未为“字节”实现
- c# - 是否有必要在跨平台应用程序中使用的文字字符串中将“\n”替换为 Environment.NewLine?
- c - 在 openssl TLS1.3 中, SSL_write 会产生 SSL_ERROR_WANT_READ 吗?SSL_read 会产生 SSL_ERROR_WANT_WRITE 吗?
- pyqt5 - 如何获取 QMainWindow 对象的大小?
- pyspark - 为什么最大的功能会抛出错误pyspark