我对代码很新。任何人都可以通过简单的方式解释为什么我不能使用像这样的goto语句,让代码重新开始?或者,如何以正确的方式完成这项工作?而且,为什么我收到关于使用“静态”的错误消息。 ** “没有这样的标签”开始“在goto statmenet的范围内” “修饰符static对此项无效”
using System;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
Start:
Random numberGenerator = new Random();
int num1 = numberGenerator.Next(1,11);
int num2 = numberGenerator.Next(1, 4);
Console.WriteLine("What is " + num1 + " times " + num2 + "?");
int svar = Convert.ToInt32(Console.ReadLine());
if (svar == num1 * num2)
{
Console.WriteLine("well done!");
}
else
{
int responseIndex = numberGenerator.Next(1, 4);
switch (responseIndex)
{
case 1:
Console.WriteLine("Wrong, try again? [Y or N]");
AskUser();
break;
case 2:
Console.WriteLine("The answer was incorrect");
AskUser();
break;
default:
Console.WriteLine("You can do better than that");
AskUser();
break;
}
static void AskUser() {
string jaellernei = Console.ReadLine().ToUpper();
if (jaellernei == "Y")
{
goto Start;
} else
{
return;
} }
}
}
}
}
答案 0 :(得分:8)
首先,您的AskUser
方法错误地嵌套在另一个方法中 - 将其移出。
其次:goto
仅在单个方法中有效 ;你可以跳转到一个堆栈帧 - 你不能在堆栈帧之间跳转。
第三:您应该使用goto
的次数......好吧,它不是 相当 零,但它渐近地接近零。
答案 1 :(得分:1)
除非你必须,否则不要使用goto! 正如@Marc Gravell所说,它在一种方法中有效。
或者:您可以在Main方法中创建一个代码的方法,然后从main方法和使用goto语句的其他方法中调用它。 喜欢:
using System;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
someFunction();
}
static void someFunction()
{
Random numberGenerator = new Random();
int num1 = numberGenerator.Next(1, 11);
int num2 = numberGenerator.Next(1, 4);
Console.WriteLine("What is " + num1 + " times " + num2 + "?");
int svar = Convert.ToInt32(Console.ReadLine());
if (svar == num1 * num2)
{
Console.WriteLine("well done!");
}
else
{
int responseIndex = numberGenerator.Next(1, 4);
switch (responseIndex)
{
case 1:
Console.WriteLine("Wrong, try again? [Y or N]");
AskUser();
break;
case 2:
Console.WriteLine("The answer was incorrect");
AskUser();
break;
default:
Console.WriteLine("You can do better than that");
AskUser();
break;
}
}
}
static void AskUser()
{
string jaellernei = Console.ReadLine().ToUpper();
if (jaellernei == "Y")
{
someFunction();
}
else
{
return;
}
}
}
}
答案 2 :(得分:0)
你可以这样做
public static Random randd = new Random();
public static void FlachCards()
{
Start:
if (AskAUser() == "Y")
{
goto Start;
}
}
public static String AskAUser()
{
Console.WriteLine("Enter Y to play again");
return Console.ReadLine();
}