2

我不确定这是否至少可行,但我想使用具有元素确切名称的变量从我的结构中访问元素。

我的程序对结构的成员进行操作,这取决于用户选择的列,但为了使其更简单(因为这不是重点),我将编写一些简单的行,所以它会是像这样的东西:

(假设我已经用另一个函数填写了列表,但这也不是重点,所以我不会说)

结构,将用于双向链表的每个节点(每个节点表示像具有两列的表中的一行)

typedef struct row {
    float A, B;
    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;
    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);
}

“开始”也是一个 _row 。它被修改为在我插入节点的同一函数中指向列表的起点。

我想知道的是如何在函数中制作这部分:

printf("\n %.2f",aux->column);

因为“列”不是结构中的成员,而是应该包含其中一个成员(A 或 B)的名称的变量。

我需要这个,所以我不必重复相同的代码,而是使用“if”并且只有一个字母 (B) 不同。

很抱歉,如果拼写和语法有问题,我的英语不是很好,非常感谢您的帮助!

4

4 回答 4

1

C 不是解释型语言,而是编译型语言。据我所知,这是不可能的。您必须编写额外的代码。此外,对于一个简单的用户来说,知道您的结构字段的名称并不好 - 所以,不用担心 =)。

于 2012-11-27T09:09:38.443 回答
1

所以基本上用户给你'A',你想要A列。
如果它只是单个字符的情况,那么你可以使用char后面的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”,则无需进行一些修改就无法使用。

于 2012-11-27T09:25:01.530 回答
0

你可以做到printf("\n %.2f",(*(aux->column) == 'A' ? aux->A : aux->B));我不明白你可以用 if 语句以外的另一种方式做到这一点。

于 2012-11-27T09:10:31.777 回答
0

也许你可以这样做:

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]);
}
于 2012-11-27T09:32:23.290 回答