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

C#在尝试生成随机数生成器时遇到解析错误,c#,C#,我正试图在大学里为一项任务做一个“猜数字”游戏,我被困在(我认为)一个解析问题上 在我运行程序之前,它不会显示任何错误,但当它到达某个点时(单击消息框后,它退出并抛出可能的错误和解决方案) 我确实想自己尝试解决这个问题,我在任何地方都搜索了这个问题,但它没有给我一个确切的错误,所以我有点困在搜索什么上 我已经包括了下面的代码和错误截图的链接 非常感谢,罗布 屏幕截图链接: private void btnGenerate\u单击(对象发送方,事件参数e) { Random gen=新的Rando

我正试图在大学里为一项任务做一个“猜数字”游戏,我被困在(我认为)一个解析问题上

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

我确实想自己尝试解决这个问题,我在任何地方都搜索了这个问题,但它没有给我一个确切的错误,所以我有点困在搜索什么上

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

非常感谢,罗布

屏幕截图链接:

private void btnGenerate\u单击(对象发送方,事件参数e)
{
Random gen=新的Random();
int randname=gen.Next(11000);
lblWelcome.Text=(“”);
btnGenerate.Visible=false;
MessageBox.Show(“计算机已拾取并存储了一个数字,请继续并猜测该数字”);
txtbxInputNumber.Visible=true;
int guess=int.Parse(txtbxInputNumber.Text);
while(猜测!=randNumber)
{
如果(猜测<随机数)
{
MessageBox.Show(“尝试更高”);
}
其他的
{
MessageBox.Show(“尝试降低”);
}
}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}

你应该
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 = 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,在这种情况下,必须首先实例化guess,因为它需要作为out参数

它会引发异常,因为输入不是数字。使用而不是
Int32.Parse

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

问题是,当您尝试进入循环时,txtInputBox值为null。将inputbox行放在while循环内,并添加一个NOTNULL检查。应该是这样的:

    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 guess=0;
while(猜测!=randNumber)
{
if!string.IsNullOrEmpty(txtbxInputNumber.Text)
{ 
guess=int.Parse(txtbxInputNumber.Text);
如果(猜测<随机数)
{
MessageBox.Show(“尝试更高”);
}
其他的
{
MessageBox.Show(“尝试降低”);
}
}
} 

.

尝试使用“int.TryParse”代替“int.Parse”

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

当您获得异常时,您试图解析的值是
“”
,或空字符串。这确实不是一个正确的整数格式。您的代码在thw while循环中被卡住,因为您从未更新
guess
请注意使用TryParse来很好地处理此问题。使用TryParse是否像我在回答中建议的那样帮助了您?如果
txtbxInputNumber.Text
包含
a
?这就是数字限制发挥作用的地方,还有锥虫的暗示
  int guess ;
  //int guess = int.Parse(txtbxInputNumber.Text); //Instead of this
  int.TryParse(txtbxInputNumber.Text, out guess ); //use this