0

我正在使用C程序,但遇到了一个问题。我有这个

#define NUMBER_OF_OPTIONS 5 

#define NAME_OPTION1 "Partida Rapida"
#define NAME_OPTION2 "Elige Nivel"
#define NAME_OPTION3 "Ranking"
#define NAME_OPTION4 "Creditos"
#define NAME_OPTION5 "Exit"


for (iterator = 1; iterator <= NUMBER_OF_OPTIONS; iterator++){

    menu_options[iterator-1]= NAME_OPTION + iterator
}

我希望 "NAME_OPTION + iterator" 取对应的值#define.例如如果变量 "iterator" 等于 1,我想menu_options[iterator-1]取 的值NAME_OPTION1,即 "Partida Rapida"。

我怎样才能得到这个?

4

3 回答 3

3

本质上,你不能。#define宏由 C 预处理器处理,并在该宏出现在代码中的任何位置进行文本替换。该宏NAME_OPTION尚未定义,因此编译器应该抱怨。C 不允许将数字附加到字符串上,尤其是附加到符号上,例如NAME_OPTION.使用数组const char*,然后您可以使用迭代器引用它。

于 2013-11-02T13:52:08.650 回答
2

你不能像这样使用定义,你可以这样做:

const char *menu_options[5] = {
   "Partida Rapida",
   "Elige Nivel",
   "Ranking",
   "Creditos",
   "Exit"
};
于 2013-11-02T13:49:05.347 回答
1

如果您使用#define 宏,您只需告诉预处理器在将代码编译为机器代码之前用其他内容替换每个出现的定义字。在这种情况下,NUMBER_OF_OPTIONS 将被 5 替换,但没有出现 NAME_OPTION*,因此不会替换任何内容,并且您可能会在预处理时遇到错误。

Piere 的解决方案展示了如何做到这一点,但我非常怀疑 char *array 上是否存在迭代器,因此您必须使用整数索引迭代给定的数组。

于 2013-11-02T14:00:40.693 回答