为该线程创建标题有点困难,但无论如何,我在 C
代码的开头确实有几个 DEFINE
,如下所示:
#define LOAD 2
#define UP 1
#define STOP 0
#define DOWN -1
它们是我的特定状态图中的状态
名称。现在,我需要使用 printf
命令打印这些州名称,但我不知道如何检索州名称的文本等效项。例如,假设 state
最初声明为:
int state = STOP;
我想要这样的东西:
printf("Current State: %s, state);
其结果是:
Current State: STOP
我知道我可以用四个 if
来模仿这个,但我想知道是否有更简单的方法来实现这一点。
谢谢
最佳答案
如果您确实需要将状态保持为 DOWN 以获得值 -1,则在使用它访问数组元素时必须特别小心。
鉴于您的状态值在 [-1 .. N-1] 范围内,您只需向它们添加一个常量 1 即可获得索引 [0 .. N],可用于寻址 a 的元素char* 数组。
const char* const state_names[] = {"down","stop","up","load"};
只有当您有连续的数字序列时,这才有效。如果您稍后添加状态#define WHATEVER 1000
,此方法将会失败。当您更改状态值时,您必须相应地重新排序字符串数组。
如果您希望保持与州相关的值的灵活性,我建议使用州名称和值的查找表。
#include <stdio.h>
enum {LOAD, UP, STOP, DOWN};
const char* const state_names[] =
{
[LOAD] = "load",
[UP] = "up",
[STOP] = "stop",
[DOWN] = "down"
};
const int state_values[] =
{
[LOAD] = 2,
[UP] = 1,
[STOP] = 0,
[DOWN] = -1
};
int main()
{
int state = STOP;
printf("Current State Name: %s\n", state_names[state]);
printf("Current State Value: %i\n", state_values[state]);
return 0;
}
这样,状态的顺序或实际值不再重要,您可以轻松添加更多状态或对它们重新排序,而无需破坏代码。
关于c - 在 C 中用其对应的字符串替换预定义的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32152493/