2016-04-26 7 views
1

私は10列のテストデータからなる4列のファイルを持っており、これらのデータはlinkedlistという4つの変数に格納されます。LinkedListの値を関数に渡す - C

struct node 
{ 
     float proxy; 
     float planAdded; 
     float actualAdded; 
     float devHours; 

     struct node *next; 
}*head = NULL, *current = NULL; 

私の目標は、私は4つの別々のcalcsum機能を持っている必要はありませんように、これらの10個のデータの合計値と平均値を計算するために、1つの機能を持つことです。

これらの値を個別にcalcSum関数に渡すにはどうすればよいですか?

たとえば、私は関数にこれを渡す方法をプロキシの合計を見つける必要がある場合?

float calcSumX(nodeT *head, head->value) 
{ 
     current = head; 
     float sum = 0; 
     while(current != NULL) 
     { 
       sum += current->x; 
       current = current->next; 
     } 
} 
+0

は私が正しくあなたを理解していれば、あなたがノードの頭を渡し、あなたがのために合計する値のオフセットをすることができ、各ノード例:calcSum(ノード、offsetofは(ノード、プロキシ))offsetofは(ノード、devHours) –

+1

あなたは 'nodeT'構造の定義を提供できますか? – foo

+0

@ LukasBernreiter nodeTは上記のノードのtypedefです – Zlatan

答えて

1

私が正しくあなたを理解していれば、これはあなたが探しているものです:あなたは必要なメンバーを定義する、enumを作成し、関数に渡すことができ

。関数は、enumの値に応じて適切なメンバーを取得します。

#include <stdio.h> 
#include <stdlib.h> 

typedef struct 
{ 
    float proxy; 
    float planAdded; 
    float actualAdded; 
    float devHours; 

    struct node *next; 
} node; 

node *head = NULL, *current = NULL; 

typedef enum {proxy, planAdded} member_op; 

float getMemberValue(member_op op) 
{ 
    if (op == proxy) 
    return current->proxy; 
    else if (op == planAdded) 
    return current->planAdded; 
    else return 0; 
} 

float calcSumX(node *head, member_op op) 
{ 
    current = head; 
    float sum = 0; 
    while (current != NULL) 
    { 
    sum += getMemberValue(op); 
    current = current->next; 
    } 
    printf("sum: %f\n", sum); 
    return sum; 
} 

int main(void) 
{ 
    node *first = (node*)malloc(sizeof(node)); 
    node *second = (node*)malloc(sizeof(node)); 
    node *third = (node*)malloc(sizeof(node)); 

    first->proxy = 1; 
    second->proxy = 2; 
    third->proxy = 3; 

    first->planAdded = 4; 
    second->planAdded = 5; 
    third->planAdded = 6; 

    first->next = second; 
    second->next = third; 
    third->next = NULL; 

    head = first; 
    calcSumX(head, proxy); 
    calcSumX(head, planAdded); 

    free(first); 
    free(second); 
    free(third); 
    return 0; 
} 
+0

ありがとう、たくさんのボス。私は 'typedef enum member_Op member_Op;'を持っていなければならなかったのですが、未知の型名エラーが発生していませんでした。ありがとうたくさん:) – Zlatan

+0

はい、それは正しいです。私はこの例を更新しました。 – foo

関連する問題