- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C 编写机器人程序,但遇到了一个我似乎无法解决的问题。
解决这个问题的唯一方法是使用大量的 goto
语句。我试图找出一种方法来节省自己编写 100 多个 goto
点和语句以及 if 语句等,并且想知道是否有一种方法可以转到字符串的值。例如-
string Next = "beginning";
goto Next;
beginning:
有什么方法可以goto
Next
的值,或者将Next
的值代入goto
声明?
如果有办法做到这一点,那么我将能够为每个驾驶命令更改 Next
的值,然后 goto
无论值是什么字符串 Next
是。
换句话说,只需将字符串转换为 goto
标识符,或用它代替一个。
感谢您的帮助!
-编辑-
很多人都建议使用 switch 语句。由于我的编程方式,我不确定这是否可行。程序的结构在这里——顺便说一句,这段代码只包含了我实际拥有的一小部分,到目前为止,我的真实代码超过 500 行。此外,驾驶命令也大大简化了。但基本概念就在这里,比我之前的更容易理解。
task main()
{
//integer list
int forwardDrivingSelector = 0;
int backwardDrivingSelector = 0;
int rightRotatingSelector = 0;
string nextCommand;
int waitTime = 0;
int countup = 0;
//driving commands
driveForward:
while(forwardDrivingSelector == 1)
{
motor[leftMotor] = 127;
motor[rightMotor] = 127;
countup++;
wait1Msec(1);
if(countup == waitTime)
{
countup = 0;
goto nextCommand;
}
}
driveBackward:
while(backwardDrivingSelector == 1)
{
motor[leftMotor] = -127;
motor[rightMotor] = 127;
countup++;
wait1Msec(1);
if(countup == waitTime)
{
countup = 0;
goto nextCommand;
}
}
rightRotate:
while(rightRotatingSelector == 1)
{
motor[leftMotor] = 127;
motor[rightMotor] = -127;
countup++;
wait1Msec(1);
if(countup == waitTime)
{
countup = 0;
goto nextCommand;
}
}
//autonomous driving code
//first command, drive forward for 1000 milliseconds
forwardDrivingSelector = 1;
nextCommand = "secondCommand";
waitTime = 1000;
goto driveForward;
secondCommand:
forwardDrivingSelector = 0;
//second command, rotate right for 600 milliseconds
rightRotatingSelector = 1;
nextCommand = "thirdCommand";
waitTime = 600;
goto rightRotate;
thirdCommand:
rightRotatingSelector = 0;
//third command, drive backwards for 750 milliseconds
backwardDrivingSelector = 1;
nextCommand = "end";
waitTime = 750;
goto driveBackward;
end:
backwardDrivingSelector = 0;
}
所以。这是如何工作的。我有一个整数列表,包括驱动命令选择器、countup 和 waitTime 整数,以及我正在谈论的字符串 nextCommand。接下来是驾驶命令。在我的真实代码中,我有大约 30 个命令,它们都连接到一个 Remote ,它的 400 多行仅用于驱动命令。接下来是自治代码。我这样设置它的原因是,自治代码部分会简短、简明、切中要点。几乎要向驱动代码添加命令,打开选择器,告诉 nextCommand 字符串下一个命令是什么,设置 waitTime(这是它执行命令的时间,以毫秒为单位),然后让代码转到您输入的驾驶命令。驾驶命令驱动您输入的时间,然后转到下一个命令;
如果有一种方法可以使 goto 语句将字符串“解释”为标识符以便可以更改,那么这一切在理论上都可行。
我现在可以想到大约 4 种简单的方法可以轻松解决这个问题,但它们会使代码变得非常非常长和困惑。
现在您对我的问题有了更好的理解,还有什么意见吗? :)
顺便说一句 - 我正在使用一个名为 robotC 的程序,我正在编写一个 vex 机器人。所以我必须使用普通的、基本的、C 语言,而且我不能使用任何插件或任何东西……这是这很复杂的另一个原因,因为我不能有多个类和类似的东西……
最佳答案
作为C语言的扩展,GCC提供了一个叫做computed gotos的特性。 ,它允许您转到
在运行时计算的标签。但是,我强烈建议您重新考虑您的设计。
与其使用带有一百多个标签的 gotos
(这很容易导致无法维护的意大利面条代码),不如考虑使用函数指针。代码将更加结构化和可维护。
关于c - 如何在 C 中获取字符串的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8783550/
我是一名优秀的程序员,十分优秀!