我正在与宇宙的操作系统,并希望使用goto
去用户输入,但我得到的错误goto语句的范围内C#转到用户输入
没有这样的标签“输入”
'input'是用户输入的变量。
我可以理解为什么发生这种情况,但我该如何解决?
我正在与宇宙的操作系统,并希望使用goto
去用户输入,但我得到的错误goto语句的范围内C#转到用户输入
没有这样的标签“输入”
'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倍5倍。 不过: 如果goto是一个突破,其结果将是10×10倍,或总共100
希望这会帮助.. :)
好吧,看起来我将不得不做很长的路... –
变量不适用于跳转或范围标识符......它没有任何意义。考虑重新检查你的需求和架构... :) – user7417866
我想提出一个操作系统与宇宙
为了得到任何远程有用的答案,我想你将不得不提供一些关于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;
}
和COSMO-代码中? –
在C#中,只能使用['goto'](https://msdn.microsoft.com/en-us/library/13940fs2.aspx)标签语句。你当然不能去一个变量(无论这意味着什么)。 – Richard
为什么你想要使用goto呢? – Sayse