gpt4 book ai didi

c - 如何在 C 中获取字符串的值?

转载 作者:行者123 更新时间:2023-12-04 18:47:08 24 4
gpt4 key购买 nike

我正在用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com