2017-02-13 45 views
-5

我正在与宇宙的操作系统,并希望使用goto去用户输入,但我得到的错误goto语句的范围内C#转到用户输入

没有这样的标签“输入”

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

我可以理解为什么发生这种情况,但我该如何解决?

+7

和COSMO-代码中? –

+2

在C#中,只能使用['goto'](https://msdn.microsoft.com/en-us/library/13940fs2.aspx)标签语句。你当然不能去一个变量(无论这意味着什么)。 – Richard

+1

为什么你想要使用goto呢? – Sayse

回答

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倍5倍。 不过: 如果goto是一个突破,其结果将是10×10倍,或总共100

希望这会帮助.. :)

+0

好吧,看起来我将不得不做很长的路... –

+0

变量不适用于跳转或范围标识符......它没有任何意义。考虑重新检查你的需求和架构... :) – user7417866

0

我想提出一个操作系统与宇宙

为了得到任何远程有用的答案,我想你将不得不提供一些关于OS范围的信息。您是否仅仅在COSMOS上做一些摆弄,还是您有一些特殊的使用案例需要使用定制的COSMOS操作系统?

,并希望使用goto语句去用户输入

特别是在后一种情况下(专门OS),你应该清楚地使用GOTO避免,除非你有一个很好的理由到这样做(并且在我看来,没有使用GOTO的真正理由)。在现代编程语言中有可行的GOTO替代品,你应该重新考虑你的设计,算法,无论如何。

回答你的问题。这里是产生您遇到

private void FirstMethod() 
{ 
    goto MyLabel; 
} 

private void SecondMethod() 
{ 
    MyLabel: 
    return; 
} 

我在Method定义的标签非常错误消息的一个示例。无论如何,从Main你不能简单地从主跳转到另一个方法,因为编译器不知道该返回到哪里,在该方法结束之后,因为没有数据被推送到GOTO上的调用堆栈(请参阅the Wikipedia page about the call stack信息)。

下,反正会的工作,因为标签和GOTO住在同一个范围

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