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;
}