2

これが少なくとも可能かどうかはわかりませんが、要素の正確な名前を持つ変数を使用して、構造から要素にアクセスしたいと考えています。

私のプログラムは構造体のメンバーで操作を行います。ユーザーが選択する列によって異なりますが、簡単にするために (それは主なポイントではないため)、簡単な行をいくつか書きます。このようなもの:

(私はすでに別の関数でリストを埋めたとしましょう。しかし、それは重要なポイントでもありませんので、私はそれを入れません)

双方向リンク リストの各ノードに使用される構造 (各ノードは、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);

「列」は構造体のメンバーではありませんが、メンバーの 1 つ (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 になります。
これは 1 文字の列名に対してのみ機能するため、列「AA」が必要な場合、これは変更なしでは機能しません。

于 2012-11-27T09:25:01.530 に答える
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 に答える
0

printf("\n %.2f",(*(aux->column) == 'A' ? aux->A : aux->B));if ステートメント以外の方法でこれを行う方法がわかりません。

于 2012-11-27T09:10:31.777 に答える