我很抱歉这是一个简单的问题,我刚刚开始。我创建了一些代码,允许用户输入一些随机骰子卷,并输出这些卷的总和。我现在被要求创建一个重复这些步骤的循环,包括提示,直到用户输入'quit'。我的问题是我的代码将字符串转换为整数,因此输入任何内容都会导致代码死亡。有关如何插入循环和中断的任何提示?我的代码是:
static void Main(string[] args)
{
Random random = new Random();
Console.WriteLine("Enter a number of dice to roll:");
string numberDiceString = Console.ReadLine();
int numberDice = Convert.ToInt32(numberDiceString);
int total = 0;
for (int index = 0; index < numberDice; index++)
{
int DieRoll = random.Next(6) + 1;
total += DieRoll;
}
Console.WriteLine(total);
Console.ReadKey();
}
答案 0 :(得分:2)
我不会使用&#34; while(true)&#34;声明。正如有人在评论中指出的那样,我宁愿在那里使用正确的条件。 那就是说我会这样做:
static void Main(string[] args)
{
Random random = new Random();
string numberDiceString;
int numberDice;
Console.WriteLine("Enter a number of dice to roll:");
while ((numberDiceString = Console.ReadLine()) != "quit")
{
bool parsed = int.TryParse(numberDiceString, out numberDice);
if (!parsed)
{
//Handle the error. The user input was not a number or "quit" word
break;
}
int total = 0;
for (int index = 0; index < numberDice; index++)
{
int DieRoll = random.Next(6) + 1;
total += DieRoll;
}
Console.WriteLine(total);
Console.WriteLine("Enter a number of dice to roll:");
}
}
我不得不说我喜欢这种方式,因为你可以很容易地看到循环何时停止。另外,我添加了一个你应该做的错误处理(如果用户输入任何不是数字的单词,会发生什么?)。
希望这有帮助。
答案 1 :(得分:1)
这种改变应该相当简单。你需要做的是创建一个while循环,然后在实际解析int之前进行检查。对此的伪代码就像是。
while(true) {
//Ask for input
//Check if it equals "quit"
//If so -> break;
//If not convert to int
//For Loop for dice rolls
//Print Total
}
我确信它可能比这更优雅,你可能想要进行更多检查以确保无效输入不会使程序崩溃,但它应该完成工作。
答案 2 :(得分:0)
这是一个非常简单的解决方案,展示了如何解析用户输入。
using System;
namespace Simpleton
{
class Program
{
static public int GetChoice()
{
int choice = 0;
while (true)
{
Console.Write("Enter number of rolls or \"quit\" to finish: ");
var answer = Console.ReadLine();
if (String.Compare(answer, "quit", true) == 0)
{
return 0; // Done
}
if (Int32.TryParse(answer, out choice))
{
return choice;
}
}
}
static void Main(string[] args)
{
var choice = 0;
while ((choice = GetChoice()) > 0)
{
Console.WriteLine($"You'll be looping {choice} times.");
for (int tries = 0; tries < choice; tries++)
{
// Looping
}
}
}
}
}
答案 3 :(得分:-1)
试试这段代码:
static void Main(string[] args)
{
Random random = new Random();
while(true)
{
String numberDiceString = "";
int numberDice = 0;
Console.WriteLine("Enter a number of dice to roll:");
numberDiceString = Console.ReadLine();
if (numberDiceString == "quit") { return; }
int total = 0;
if (Int32.TryParse(numberDiceString, out numberDice))
{
total = 0;
for (int index = 0; index < numberDice; index++)
{
int DieRoll = random.Next(6) + 1;
total += DieRoll;
}
}
Console.WriteLine(total);
}
}
答案 4 :(得分:-3)
我不是C#程序员,但您可以明确测试“退出”并使用goto
BeginLoop:
Console.WriteLine("Enter a number of dice to roll:");
string numberDiceString = Console.ReadLine();
if (numberDiceString == "quit")
{
goto EndLoop;
}
int numberDice = Convert.ToInt32(numberDiceString);
/* Rest of code you want to do per iteration */
goto BeginLoop;
EndLoop: