C 如何使用具有元素确切名称的变量访问结构元素?
我不确定这是否至少是可能的,但我想使用一个具有元素确切名称的变量从我的结构中访问元素 我的程序对结构的成员进行操作,这取决于用户选择的列,但为了使它更简单(因为这不是重点),我将写一些简单的行,所以它将是这样的:C 如何使用具有元素确切名称的变量访问结构元素?,c,struct,C,Struct,我不确定这是否至少是可能的,但我想使用一个具有元素确切名称的变量从我的结构中访问元素 我的程序对结构的成员进行操作,这取决于用户选择的列,但为了使它更简单(因为这不是重点),我将写一些简单的行,所以它将是这样的: typedef struct row { float col[2]; //A, B struct row *prev, *next; } _row; (假设我已经用另一个函数填写了列表,但这也不是重点,所以我不会把它放进去) 结构,将用于双链接列表的每个节点(每个节点表示为具有
typedef struct row {
float col[2]; //A, B
struct row *prev, *next;
} _row;
(假设我已经用另一个函数填写了列表,但这也不是重点,所以我不会把它放进去)
结构,将用于双链接列表的每个节点(每个节点表示为具有两列的表中的一行)
主要
以及功能
void show_column(char column){
_row *aux;
aux=start;
while(aux->next!=NULL){
printf("\n %.2f",aux->column);
aux=aux->next;
}
//this is because that cycle is not going to show the last node
printf("\n %.2f",aux->column);
}
“开始”也是一行。它被修改为指向插入节点的同一函数中列表的起点
我想知道的是如何在函数中创建此部分:
printf("\n %.2f",aux->column);
因为“column”不是结构中的成员,但它是一个变量,应该包含其中一个成员(a或B)的名称
我需要这个,这样我就不必重复相同的代码,只需使用“if”和一个不同的字母(B)
对不起,若拼写和语法有问题,我的英语不是很好,非常感谢你们的帮助 C不是解释语言,而是编译语言。据我所知,这是不可能的。您必须编写额外的代码。
此外,对于一个简单的用户来说,知道结构字段的名称是不好的-因此,不要担心=)。您可以执行
printf(“\n%.2f”,(*(aux->column)='a'?aux->a:aux->B))代码>除了if语句,我看不出还有什么其他方法可以做到这一点。所以基本上用户给了你“A”,你需要A列。
如果只是单个字符的大小写,则可以使用字符后面的int
将浮点数设置为如下数组:
typedef struct row {
float col[2]; //A, B
struct row *prev, *next;
} _row;
然后改变
printf("\n %.2f",aux->column);
成为
printf("\n %.2f",aux->col[(int(toUpper(column) - 'A'))]);
因此“A”将变为0,
“B”将变为1等。
这只适用于单字符列名,因此如果您想要一个列“AA”,不做一些修改就无法工作。也许您可以这样做:
typedef struct row {
float col[2];
struct row *prev, *next;
} _row;
int main(){
char column;
printf("Which column would you like to see? (A or B): ");
scanf("%c",&column);
show_column(column);
system("PAUSE");
}
void show_column(char column){
_row *aux;
aux=start;
column = column - 'A';
while(aux->next!=NULL){
printf("\n %.2f",aux->col[column]);
aux=aux->next;
}
//this is because that cycle is not going to show the last node
printf("\n %.2f",aux->col[column]);
}
我认为您正在尝试实现运行时多形性。我不知道如何在c中实现这一点。但这在oop(c++或Java)中是很正常的。非常感谢@Daboyzuk和你们,感谢你们两位,我意识到从结构中将数组声明为元素,然后只要求用户输入列数(整数,1或2),然后从该数字中减去1,并使用“column”作为col[]的索引要容易得多在我所有的行动中。谢谢
typedef struct row {
float col[2];
struct row *prev, *next;
} _row;
int main(){
char column;
printf("Which column would you like to see? (A or B): ");
scanf("%c",&column);
show_column(column);
system("PAUSE");
}
void show_column(char column){
_row *aux;
aux=start;
column = column - 'A';
while(aux->next!=NULL){
printf("\n %.2f",aux->col[column]);
aux=aux->next;
}
//this is because that cycle is not going to show the last node
printf("\n %.2f",aux->col[column]);
}