C#在尝试生成随机数生成器时遇到解析错误

本文关键字:遇到 错误 随机数生成器 | 更新日期: 2023-09-27 18:13:07

我正试图为uni中的一项任务制作一个"猜测数字"游戏,但我一直在思考(我认为(是一个解析问题。

在我运行程序之前,它不会显示任何错误,但当它到达某个点时(单击消息框后,它会退出并抛出可能的错误和解决方案(。

我确实想自己尝试解决这个问题,我确实到处搜索了这个问题,但它并没有给我一个确切的错误,所以我有点拘泥于搜索什么。

我已经包含了下面的代码和错误截图的链接。

非常感谢Rob

截屏链接:截屏

 private void btnGenerate_Click(object sender, EventArgs e)
 {
     Random gen = new Random();
     int randNumber = gen.Next(1, 1000);
     lblWelcome.Text = ("");
     btnGenerate.Visible = false;
     MessageBox.Show("The computer has picked a number and stored it, please continue and guess the number");
     txtbxInputNumber.Visible = true;
     int guess = int.Parse(txtbxInputNumber.Text);
     while (guess != randNumber)
     {
        if (guess < randNumber)
        {
            MessageBox.Show("Try higher");
        }
        else
        {
            MessageBox.Show("Try lower");
        }
     }
}
private void Form1_Load(object sender, EventArgs e)
{
}

C#在尝试生成随机数生成器时遇到解析错误

您应该从用户处TryParse您的输入,但这并不总是有效的数字

int guess = 0;
int.TryParse(txtbxInputNumber.Text, out guess);

如果你愿意,你可以显示一个错误,这样他就知道他犯了一个错误

int guess = 0;
if(!int.TryParse(txtbxInputNumber.Text, out guess))
{
    //show error message
    return; // quit the method
}

当我看到屏幕截图时,您的txtbxInputNumber.Text是空的!这不是有效的国际

您应该使用,int.TryParse()

int guess;
if(int.TryParse(txtbxInputNumber.Text, out guess))
{
    // the guess is a valid int!
}
else
{
    // the guess is not a valid int!
}

由于输入字符串为空,解析无法将其识别为数字,因此应添加条件

int guess = int.Parse(txtbxInputNumber.Text == "" ? "0" : txtbxInputNumber.Text);

这与使用if是一样的,尽管if语句有一个额外的好处,你可以返回一个错误

if(txtbxInputNumber.Text == "")
{
    MessageBox.Show("Try higher");
    return;
}
else
{
    int guess = int.Parse(txtbxInputNumber.Text);
}

你也可以将输入限制为数字,这样它就会自动在中有一个数字

另一种选择是使用TryParse,在这种情况下,猜测必须首先实例化,因为它需要作为输出参数

它抛出一个异常,因为输入不是数字。使用Int32.TryParse而不是Int32.Parse

int guess;
if (!Int32.TryParse(txtbxInputNumber.Text, out guess))
     MessageBox.Show("Enter a number");

问题是,当您尝试进入循环时,txtInputBox值为null。将inputbox行放在while循环中,并添加一个非null复选框。应该这样工作:

    int guess = 0;
    while (guess != randNumber)
    {
        if !string.IsNullOrEmpty(txtbxInputNumber.Text)
        { 
           guess = int.Parse(txtbxInputNumber.Text);
           if (guess < randNumber)
           {
               MessageBox.Show("Try higher");
           }
           else
           {
               MessageBox.Show("Try lower");
           }
        }
    } 

尝试使用"int.TryParse"而不是"int.Parse"。

  int guess ;
  //int guess = int.Parse(txtbxInputNumber.Text); //Instead of this
  int.TryParse(txtbxInputNumber.Text, out guess ); //use this