我在c中创建一个像这样的结构
struct book {
char name;
int page;
} b2,b3,b4;
如何使用for循环打印这些 我的意思是
for(int i=2 ; i<5 ; ++i)
printf("%c %d", b{i}.name , b{i}.page); //bi.name will not work obviously
是否需要进行某种特殊操作?
如果已经在网站上的其他地方回答过,我真诚地道歉。我不知道自己应该准确搜索什么。
答案 0 :(得分:4)
我有一个解决方案:
存储结构到指针数组并循环显示
struct book **arr = malloc(sizeof(struct book *) * 4);
arr[0] = &b2;
arr[1] = &b3;
arr[2] = &b4;
arr[3] = NULL;
for (int i=0; i < 3; ++i)
{
printf("%c %d", arr[i]->name , arr[i]->page);
}
修改强>:
或者像其他社区gyus所说的那样,创建一个结构阵列(更容易操作)
示例:
struct book books[3];
或者
struct book *books = malloc(sizeof(struct book) * 3);
答案 1 :(得分:1)
您可以使用数组和宏:
struct book {
char name;
int page;
};
#ifndef __cplusplus
struct
#endif
book library[3];
#define b2 (library[0])
#define b3 (library[1])
#define b4 (library[2])
void initialize(void)
{
b2.name = 'a';
b2.page = 5;
b3.name = 'F';
b3.page = -85;
b4.name = '$';
b4.page = 65535;
}
void Print_Library(void)
{
unsigned int i = 0;
for (i = 0; i < 3; ++i)
{
printf("First character of book %d: %c\n", i, library[i].name);
printf("Page of book %d: %d\n", i, library.page);
printf("\n");
}
}
名称字段是单个字符,而不是字符串。
注意:我使用了#if
预处理程序指令,因为结构的实例在C和C ++之间的定义不同,你指定了它们。
编辑1:在运行时按名称访问变量。
虽然我从来不需要在运行时按名称访问变量,但一种方法是将变量映射到它们的名称。
struct book; // forward declaration, see above.
struct Variable_Name_Entry
{
#ifdef __cplusplus // Required since you tagged both languages
std::string name;
book * p_variable;
#else
char name[16];
struct book * p_variable;
#endif
};
#ifndef __cplusplus
struct
#endif
Variable_Name_Entry variable_names[] =
{
{"b2", &b2},
{"b3", &b3},
{"b4", &b4},
};
const unsigned int number_of_variable_names =
sizeof(variable_names) / sizeof(variable_names[0]);
#ifndef __cplusplus
struct
#endif
book * name_to_variable(const char * p_name)
{
unsigned int i = 0;
for (i = 0; i < number_of_variable_names; ++i)
{
#ifdef __cplusplus
if (variable_names[i].name == p_name)
#else
if (strcmp(variable_names[i].name, p_name) == 0)
#endif
{
return variable_names[i].p_variable;
}
}
return NULL;
}
您真的需要按名称访问变量,还是有不同的设计?
答案 2 :(得分:0)
您可以收集指向数组中变量的指针,例如像这样在C ++ 11中:
for( auto p : {&b2, &b3, &b4} )
{
cout << p->name << " " << p->page << endl;
}
我留给你创建类似的C语言解决方案,如果你想要(问题是/被标记为C ++和C)。
在C中,必须手动创建数组,可以这么说。