我对编程很新,而且我已经意识到人们不喜欢不喜欢" goto" -methods。我想知道如何编写允许用户决定输入多少条目的代码?例如,在下面的代码中,用户输入一个名称,然后询问他/她是否想要输入另一个名字。我怎么能这样做而不必使用go-to方法?
public class GoToTest
{
public static void Main()
{
InputName:
string name;
Console.Write("Input name: ");
name = Console.ReadLine();
string decision;
Console.WriteLine(""); //Empty line for increased readability
Console.WriteLine("Would you like to input another name? Yes - No");
decision = Console.ReadLine();
if (decision == "Yes")
{
goto InputName;
}
else
{
Console.WriteLine("Name is " + name);
}
}
}
答案 0 :(得分:5)
执行此操作的一个好模式是在满足特定条件时中断的“无限”循环:
while (true) {
var input = GetInputFromConsole();
if (input == "exit")
break;
}
while循环的结束括号几乎是一个转到顶部。然而,这比goto更好,因为循环为变量和视觉缩进提供了范围。它更容易理解。
答案 1 :(得分:1)
我一般都不喜欢(真实),所以我不得不给出这个答案。
do
{
string name = GetName();
Console.WriteLine("Would you like to input another name? (Y)es - (N)o");
}while(Console.ReadLine().ToUpper().StartsWith("Y"));
和GetName可能如下所示。
string GetName()
{
Console.Write("Input name: ");
return Console.ReadLine();
}
答案 2 :(得分:0)
您可以通过检查退出条件使其更加整洁:
string decision = "y";
while (decision == "y")
{
string name;
Console.Write("Input name: ");
name = Console.ReadLine();
Console.WriteLine("Name is " + name);
Console.Write("\nWould you like to input another name? y/n: ");
decision = Console.ReadLine().ToLower();
}
(字符串中的\n
为您提供一个新行。)
或者你可以让用户在完成输入名字后单独输入后,让用户更轻松:
string name = "x"; // anything except an empty string
Console.WriteLine("Enter a blank line to finish...");
while (!string.IsNullOrWhiteSpace(name))
{
Console.Write("\nInput name: ");
name = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(name))
{
Console.WriteLine("Name is " + name);
}
}
我使用!string.IsNullOrWhiteSpace(name)
以防用户决定空行表示空格或标签。