[英]How to replace while with do-while in this code?
有没有什么简单的方法可以将“do”添加到这个程序中? 在我的作业中需要有一个“做”:)
namespace Uppgift_1___Gissa_talet
{
class Program
{
static void Main(string[] args)
{
Random randomerare = new Random();
int slump_tal = randomerare.Next(1, 101);
Console.WriteLine("Minigame: Gissa talet!");
Console.WriteLine();
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
while (tal != slump_tal)
{
if (tal < slump_tal) //Är det mindre?
{
Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning
}
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
}
}
}
namespace Uppgift_1___Gissa_talet
{
class Program
{
static void Main(string[] args)
{
Random randomerare = new Random();
int slump_tal = randomerare.Next(1, 101);
Console.WriteLine("Minigame: Gissa talet!");
Console.WriteLine();
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
do //You start the loop before the test expression is checked
{
if (tal < slump_tal) //Är det mindre?
{
Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning
}while(tal != slump_tal); // The test expression is checked here.
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
}
}
}
您所要做的就是将while
移动到块的末尾(后跟一个分号)并在块的开头添加一个do
。
此外,这允许您将用户输入完全移动到循环内,而不是将其写入两次。 唯一的问题是tal
必须在循环外定义,因为它用于while
条件:
private static void Main(string[] args)
{
int slump_tal = new Random().Next(1, 101);
int tal;
Console.WriteLine("Minigame: Gissa talet!\n");
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
do
{
tal = Convert.ToInt32(Console.ReadLine());
if (tal < slump_tal)
{
Console.WriteLine("Fel! Större!");
}
else if (tal > slump_tal)
{
Console.WriteLine("Fel! Mindre!");
}
} while (tal != slump_tal);
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på en tangent för att avsluta...");
Console.ReadLine();
GetKeyFromUser("\nDone! Press any key to exit...");
}
您可以进行的另一个改进是包含一个辅助方法,该方法验证用户输入实际上是一个数字,这样如果他们输入类似“2”而不是“2”的内容,您就不会抛出异常。 下面的方法接受一个“提示”字符串(用户的问题),并使用一个循环,其中条件使用int.TryParse
来验证条目是一个整数,并继续循环直到它返回true
,然后返回用户输入的整数:
private static int GetIntFromUser(string prompt)
{
int input;
do
{
Console.Write(prompt);
} while (!int.TryParse(Console.ReadLine(), out input));
return input;
}
现在我们可以利用这个方法来获取用户输入:
private static void Main(string[] args)
{
int slump_tal = new Random().Next(1, 101);
int tal;
var prompt = "Skriv in ett tal mellan 1 och 100: ";
Console.WriteLine("Minigame: Gissa talet!\n");
do
{
tal = GetIntFromUser(prompt);
prompt = tal < slump_tal
? "Fel! Det numret är för litet. Försök igen: "
: "Fel! Det numret är för stort. Försök igen: ";
} while (tal != slump_tal);
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Tryck på valfri tangent för att avsluta...");
Console.ReadLine();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.