C#转到用户输入
我正在用Cosmos制作一个操作系统,希望使用C#转到用户输入,c#,variables,goto,cosmos,C#,Variables,Goto,Cosmos,我正在用Cosmos制作一个操作系统,希望使用goto转到用户输入,但我得到了错误 goto语句范围内没有此类标签“input” “输入”是用户输入的变量 我可以理解为什么会发生这种情况,但如何修复它?您不能使用变量作为goto语句的范围标识符。。您必须在作用域(命名空间)中使用标签标识符,用“:”表示 比如说 using System; class Program { static void Main() { Console.WriteLine(M());
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?你想如何使用它?我看不到跳转到变量的用途-实际上跳转到变量根本没有意义。变量不用于跳转或范围标识符。。。这毫无意义。考虑重新检查你的需求和体系结构……)