Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#转到用户输入_C#_Variables_Goto_Cosmos - Fatal编程技术网

C#转到用户输入

C#转到用户输入,c#,variables,goto,cosmos,C#,Variables,Goto,Cosmos,我正在用Cosmos制作一个操作系统,希望使用goto转到用户输入,但我得到了错误 goto语句范围内没有此类标签“input” “输入”是用户输入的变量 我可以理解为什么会发生这种情况,但如何修复它?您不能使用变量作为goto语句的范围标识符。。您必须在作用域(命名空间)中使用标签标识符,用“:”表示 比如说 using System; class Program { static void Main() { Console.WriteLine(M());

我正在用Cosmos制作一个操作系统,希望使用
goto
转到用户输入,但我得到了错误

goto语句范围内没有此类标签“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;
    }
}
使用系统;
班级计划
{
静态void Main()
{
Console.WriteLine(M());
}
静态int M()
{
int-dummy=0;
对于(int a=0;a<10;a++)
{
对于(int y=0;y<10;y++)//运行到条件。
{
对于(int x=0;x<10;x++)//运行到条件。
{
如果(x)=5&&
y==5)
{
转到外部;
}
}
虚拟++;
}
外部:
持续
}
返回假人;
}
}
方法M包含三个嵌套循环。第一个循环遍历数字[0,9],两个内部循环也是如此。但是在第三个循环中,检查一个条件,该条件使用break关键字使循环退出。 对于 中断

代码在每次完成内部循环后递增虚拟变量。如果内部循环提前退出,则应不使用此变量。对于goto语句,它不会递增。 结果: 值50打印到控制台。整数增加10 x 5倍。 然而: 如果goto是一个中断,结果将是10 x 10次,或者总共100次

希望这能有所帮助……)

我正在用Cosmos制作一个操作系统

为了得到任何有用的答案,我想你必须给出一些关于操作系统范围的信息。你只是在摆弄COSMOS一点,还是你有一些特殊的用例想与定制的COSMOS OS一起使用

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

特别是在后一种情况下(专用操作系统),您应该明确避免使用GOTO,除非您有一个非常好的理由这样做(在我看来,没有真正好的理由使用GOTO)。在现代编程语言中,有一些可行的替代GOTOs的方法,您应该重新考虑您的设计、算法等等

回答你的问题。下面是一个示例,它会生成您遇到的错误消息

private void FirstMethod()
{
    goto MyLabel;
}

private void SecondMethod()
{
    MyLabel:
    return;
}
我在
方法中定义了一个标签。无论如何,从
Main
您不能简单地从Main跳转到另一个方法,因为编译器在方法完成后不知道返回到哪里,因为GOTO上没有数据会被推送到调用堆栈(请参阅以获取更多信息)

无论如何,下面的方法是可行的,因为标签和GOTO位于同一范围内

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

而cosmo代码??在C#中,您只能使用带标签的语句。你当然不能去变量(不管那意味着什么)。你到底为什么要使用goto?你想如何使用它?我看不到跳转到变量的用途-实际上跳转到变量根本没有意义。变量不用于跳转或范围标识符。。。这毫无意义。考虑重新检查你的需求和体系结构……)