C# 转到用户输入
C# goto user input
我正在用 Cosmos 制作一个 OS 并想使用 goto
转到用户输入但我收到错误
No such label 'input' within the scope of the goto statement
'input'是用户输入的变量。
我能理解为什么会这样,但我该如何解决?
您不能将变量用作 goto 语句的范围标识符。您必须在范围(命名空间)内使用标签标识符,用“:”表示它...
例如
using System;
class Program
{
static void Main()
{
Console.WriteLine(M());
}
static int M()
{
int dummy = 0;
for (int a = 0; a < 10; a++)
{
for (int y = 0; y < 10; y++) // Run until condition.
{
for (int x = 0; x < 10; x++) // Run until condition.
{
if (x == 5 &&
y == 5)
{
goto Outer;
}
}
dummy++;
}
Outer:
continue;
}
return dummy;
}
}
方法 M 包含三个嵌套循环。第一个循环遍历数字 [0, 9],两个内部循环也是如此。但是在第三个循环中,使用 break 关键字检查导致循环退出的条件。
为了
休息
每次完成内循环后,代码都会递增虚拟变量。如果内循环提前退出,这个变量应该单独保留。使用 goto 语句,它不会递增。
结果:
值 50 打印到控制台。 int 递增 10 x 5 次。
然而:
如果 goto 是中断,则结果将是 10 x 10 次,即总共 100 次。
希望对您有所帮助..:)
I am making an OS with Cosmos
为了获得任何有用的答案,我认为您必须提供一些有关 OS 范围的信息。您只是稍微摆弄一下 COSMOS,还是您有一些特殊的 use-case 想要与自定义 COSM[=31= 一起使用] OS?
and want to use goto to go to the user input
特别是在后一种情况下(专门 OS)你应该明确避免使用 GOTO,除非你有非常好的理由这样做(并且在我的愚见,没有真正好的理由使用 GOTO)。在现代编程语言中有可行的 GOTO 替代方案,您应该 re-think 您的设计、算法等等。
回答你的问题。这是一个生成您遇到的错误消息的示例
private void FirstMethod()
{
goto MyLabel;
}
private void SecondMethod()
{
MyLabel:
return;
}
我在Method
中定义了一个标签。无论如何,从 Main
你不能简单地从 main 跳到另一个方法,因为编译器不知道 return 到哪里,方法完成后,因为没有数据会被推送到调用堆栈在 GOTO 上(请参阅 the Wikipedia page about the call stack 了解更多信息)。
无论如何,以下是可行的,因为标签和 GOTO 位于同一范围内
void MyMethod()
{
goto MyLabel;
// do something
MyLabel:
return;
}
我正在用 Cosmos 制作一个 OS 并想使用 goto
转到用户输入但我收到错误
No such label 'input' within the scope of the goto statement
'input'是用户输入的变量。
我能理解为什么会这样,但我该如何解决?
您不能将变量用作 goto 语句的范围标识符。您必须在范围(命名空间)内使用标签标识符,用“:”表示它...
例如
using System;
class Program
{
static void Main()
{
Console.WriteLine(M());
}
static int M()
{
int dummy = 0;
for (int a = 0; a < 10; a++)
{
for (int y = 0; y < 10; y++) // Run until condition.
{
for (int x = 0; x < 10; x++) // Run until condition.
{
if (x == 5 &&
y == 5)
{
goto Outer;
}
}
dummy++;
}
Outer:
continue;
}
return dummy;
}
}
方法 M 包含三个嵌套循环。第一个循环遍历数字 [0, 9],两个内部循环也是如此。但是在第三个循环中,使用 break 关键字检查导致循环退出的条件。 为了 休息
每次完成内循环后,代码都会递增虚拟变量。如果内循环提前退出,这个变量应该单独保留。使用 goto 语句,它不会递增。 结果: 值 50 打印到控制台。 int 递增 10 x 5 次。 然而: 如果 goto 是中断,则结果将是 10 x 10 次,即总共 100 次。
希望对您有所帮助..:)
I am making an OS with Cosmos
为了获得任何有用的答案,我认为您必须提供一些有关 OS 范围的信息。您只是稍微摆弄一下 COSMOS,还是您有一些特殊的 use-case 想要与自定义 COSM[=31= 一起使用] OS?
and want to use goto to go to the user input
特别是在后一种情况下(专门 OS)你应该明确避免使用 GOTO,除非你有非常好的理由这样做(并且在我的愚见,没有真正好的理由使用 GOTO)。在现代编程语言中有可行的 GOTO 替代方案,您应该 re-think 您的设计、算法等等。
回答你的问题。这是一个生成您遇到的错误消息的示例
private void FirstMethod()
{
goto MyLabel;
}
private void SecondMethod()
{
MyLabel:
return;
}
我在Method
中定义了一个标签。无论如何,从 Main
你不能简单地从 main 跳到另一个方法,因为编译器不知道 return 到哪里,方法完成后,因为没有数据会被推送到调用堆栈在 GOTO 上(请参阅 the Wikipedia page about the call stack 了解更多信息)。
无论如何,以下是可行的,因为标签和 GOTO 位于同一范围内
void MyMethod()
{
goto MyLabel;
// do something
MyLabel:
return;
}