【问题标题】:While loops in programming C#C#编程中的while循环
【发布时间】:2013-11-12 15:48:59
【问题描述】:

我正在尝试创建一个程序,它要求用户输入整数并在 while 循环中将它们相加,然后当输入负数时,循环结束,但由于某种原因我找不到将用户添加到总数中的数字相加的方法,它只在小计旁边显示最初为 0 的总数(用户输入的金额)

int iNumber =0;
int iTotal = 0;
int iSubTotal = 0;

//Prompt user to enter two values
Console.WriteLine("Enter value you want to add to total value or a negative number to end the loop");

while (iNumber >= 0)
{
    iSubTotal = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("The Total is now " + iSubTotal + iTotal);

    if (iNumber < 0)
    {
        Console.WriteLine("You have not passed the loop");
        Console.WriteLine("The Total is now " + iTotal);
    }

    //Prevent program from closing
    Console.WriteLine("Press any key to close");
    Console.ReadKey();
}

【问题讨论】:

  • 没有你在哪里积累结果
  • 尝试添加行iTotal = iTotal + iNumber;
  • Console.WriteLine("The Total is now " + iSubTotal + iTotal); 这是将它们转换为字符串,并将它们连接在一起
  • 您没有将附加项分配给此处的变量“iSubTotal + iTotal”
  • while (true) if (false) Console.WriteLine("This is your first clue...");

标签: c# loops while-loop


【解决方案1】:

您永远不会在代码中修改iSubTotaliTotal。所以他们的价值观永远不会改变。

在循环中的某处您可能想要修改值:

// ...
iSubTotal = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The Total is now " + iSubTotal + iTotal);
iTotal += iNumber;
// ...

编辑:根据您在下面的评论,听起来您需要更稳健地处理输入。如果字符串不能转换为整数,Convert.ToInt32() 将失败。您可以通过以下方式使其更加健壮:

if (int.TryParse(Console.ReadLine(), out iSubTotal))
{
    // Parsing to an integer succeeded, iSubTotal now contains the new value
}
else
{
    // Parsing to an integer failed, respond to the user
}

【讨论】:

  • 不是某处,他显示后会比较理想,否则会显示不正确的总数。
  • 试过了,它显示“iSubTotal = Convert.ToInt32(Console.ReadLine());”的“输入字符串格式不正确”
  • 任何想法如何解决?
  • @Alex:这正是从您的原始代码中复制的一行代码。如果那失败了,那将是完全不同的问题。但要修复它,您需要使用int.TryParse() 而不是Convert.ToInt32()。我马上更新答案...
  • 我认为这是解决方法,我只需要尝试解决我遇到的其他问题,谢谢!
【解决方案2】:

您没有在此处将添加分配给变量“iSubTotal + iTotal”

iTotal += iSubTotal;
Console.WriteLine("The Total is now " + iTotal);

不是这两行

iSubTotal = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The Total is now " + iSubTotal + iTotal);

【讨论】:

  • +1 他可能仍然需要 readline,因为我认为它是小计的用户输入,但是的,这就是答案。
  • 嗯,是的,就像 aaron 说的,我需要一种方法让用户输入小计,我已经用这个替换了代码,它直接显示总数为 0?跨度>
  • @Alex 只需将iSubTotal = Convert.ToInt32(Console.ReadLine()); 放在其他两行之前
【解决方案3】:

那是因为

 Console.WriteLine("The Total is now " + iSubTotal + iTotal);

不正确。如果将两个数字相加,则需要将答案存储在某处,而使用控制台时则不需要。写+符号用于连接而不是相加。

【讨论】:

    【解决方案4】:

    您永远不会更改 iNumber 或 iTotal。我认为这样的东西更符合您在顶部的需求。

    while (iNumber >= 0)
        {
            iNumber = Convert.ToInt32(Console.ReadLine());
            iTotal += iNumber;
            Console.WriteLine("The Total is now " + iSubTotal + iTotal);
    ...
    

    【讨论】:

      【解决方案5】:

      iSubTotal + iTotal

      应该是

      (iSubTotal + iTotal)

      否则它被读取为字符串。

      【讨论】:

      • 它仍然被转换成一个字符串,这只是指定操作符的操作顺序(已经是这个顺序)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2014-11-30
      • 1970-01-01
      • 2014-04-01
      相关资源
      最近更新 更多