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]);
}