C#转到用户输入

时间:2017-02-13 08:23:43

标签: c# variables goto cosmos

我正在使用Cosmos制作操作系统,并希望使用goto转到用户输入但我收到错误

  

没有这样的标签'输入'在goto语句的范围内

'输入'是用户输入的变量。

我能理解为什么会这样,但我该如何解决?

2 个答案:

答案 0 :(得分:1)

你不能将用户变量作为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次。

希望这个帮助.. :))

答案 1 :(得分:0)

  

我正在使用Cosmos制作操作系统

为了获得任何远程有用的答案,我认为您必须提供有关操作系统范围的一些信息。您是否只是稍微使用COSMOS,或者您是否想要使用自定义COSMOS OS提供一些特殊用例?

  

并希望使用goto转到用户输入

特别是在后一种情况下(专业操作系统)你应该明确地避免使用GOTO,除非你有非常好的理由这样做(并且我认为没有这样的事情)非常好的理由使用GOTO)。现代编程语言中存在可行的GOTO替代方案,您应该重新考虑您的设计,算法。

回答你的问题。这是一个产生您遇到的错误消息的示例

private void FirstMethod()
{
    goto MyLabel;
}

private void SecondMethod()
{
    MyLabel:
    return;
}

我在Method中定义了一个标签。无论如何,从Main你不能简单地从main跳转到另一个方法,因为编译器在方法完成后不知道返回的位置,因为没有数据会被推送到GOTO上的调用堆栈(请有关详细信息,请参阅the Wikipedia page about the call stack

以下,无论如何都可行,因为标签和GOTO生活在同一范围内

void MyMethod()
{
    goto MyLabel;
    // do something
    MyLabel:
    return;
}