【问题标题】:Can you help me with an error I've been receiving: "input string was not in the correct format?"你能帮我解决我收到的错误:“输入字符串的格式不正确吗?”
【发布时间】:2019-11-01 01:05:29
【问题描述】:

这里是stackoverflow的新手!因此,如果有人对如何发布一个好问题有任何提示,我将不胜感激。 c# 也是新的,这就是我创建这个程序的原因。

应用程序采用两个随机整数并将它们显示到标签上,它会说:(randomNumber1) + (randomNumber2) = 的值是多少? .假设用户将这些数字相加并在“答案”文本框中输入他们的答案。但是在调试并运行程序后,我在第五行收到错误,“输入字符串的格式不正确”:

正确答案 = Convert.ToInt32("" + labelNumber1.Text + labelNumber2.Text); .

代码:

private void btnCheck_Click(object sender, EventArgs e)
    {

        int correctAnswer;
        correctAnswer = Convert.ToInt32("" + labelNumber1.Text + labelNumber2.Text);

        int userAnswer;
        userAnswer = Convert.ToInt32(answerTextBox.Text);

        if (userAnswer == correctAnswer)
        {
            correctAnswer = int.Parse(resultLabel.Text);
        }
        else
        {
            MessageBox.Show("Your Answer is Incorrect");
            correctAnswer = int.Parse(resultLabel.Text);
        }
    }

【问题讨论】:

  • 查看Convert.Int32 的规范表明,如果value does not consist of an optional sign followed by a sequence of digits (0 through 9).,您将得到该异常。您需要确保 labelNumber1.TextlabelNumber2.Text 只是数字或 -+ 而不是别的。
  • labelNumber1.TextlabelNumber2.Text 的值是多少?两者都是空的,或者一个或两个都不是数字。 answerTextBox.Text 也是如此
  • Here are some tips 了解如何发布一个好问题。
  • 仅供参考,当连接两个 Text 属性时,您不需要 "",因为它们已经是 string
  • 我试图重新命名问题并删除第一句话,它说已经有一个问题命名为so,这里是stackoverflow.com/questions/20398965/…,先去stackoverflow.com/help/how-to-ask看看Have a nice day

标签: c#


【解决方案1】:

您正在尝试添加两个字符串并将它们视为Convert.ToInt32() 方法中的数字。您必须一次解析一个,然后将它们添加为整数,如下所示:

int number1 = Convert.ToInt32(labelNumber1.Text);
int number2 = Convert.ToInt32(labelNumber2.Text);
correctAnswer = number1 + number2;

如果有任何FormatException 抛出,我也会使用异常处理来捕获,因为您给出的错误表明输入的输入不是数字,因此它必须包含一个或多个非数字字符.

try {
    // TODO: Code
}
catch (FormatException er)
{
    lblError.Text =  "Error: You must enter in a number.";
}

【讨论】:

  • 另外我猜他们应该这样做resultLabel.Text = correctAnswer.ToString();
  • 我仍然收到“输入字符串的格式不正确”错误,特别是@以下行:int number1 = Convert.ToInt32(labelNumber1.Text);
  • @daydayday 那么这不是一个数字。你在labelNumber1.Text 输入什么?要么什么都没有(不是数字),要么是其他不是数字的东西。
  • @daydayday 那么这一定意味着在labelNumber1 中输入的字符串中有一个或多个非数字字符。放入try-catch 块以捕获任何数字格式或输入不匹配异常。
  • @MaxVoisard,我同意您的解决方案可行,但我们使用 TryParse() 进行安全类型转换。我相信这里不需要try{}catchTryParse() 将解决运维问题
【解决方案2】:

labelNumber1.TextlabelNumber2.Text 的数据类型是字符串。当您对两个字符串(即string + string)执行+ 时,它会连接起来,但在这里您尝试添加两个标签文本,因此首先将每个文本转换为int,然后添加它。

int correctAnswer = int.MinValue;
if(int.TryParse(labelNumber1.Text, out int number1) && int.TryParse(labelNumber2.Text, out int number2))
   {
      correctAnswer = number1 + number2;
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2013-01-28
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多