2016-04-26 11 views
1

Ich habe eine Datei mit vier Spalten von 10 Testdaten und diese Daten werden in vier Variablen zu einem linkedlist gespeichert.Übergeben einer LinkedList-Wert an eine Funktion - C

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

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

Mein Ziel ist es, eine eine Funktion haben Summe und Durchschnitt dieser 10 Daten zu berechnen, so dass ich muß nicht vier separate calcsum Funktionen hat.

Wie diese Werte getrennt an eine calcSum Funktion übergeben werden?

Zum Beispiel, wenn ich die Summe des Proxys finden muss, wie man das an die Funktion weitergibt?

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

Wenn ich Sie richtig verstehe können Sie den Kopf des Knotens passieren und Versatz der Werte, die Sie für summieren möchten jeder Knoten zB: calcSum (Knoten, offsetof (Knoten, Proxy)) offsetof (Knoten, devHours) etc. –

+1

Kannst du die Definition der 'nodeT' Struktur angeben? – foo

+0

@LukasBernreiter nodeT ist die Typedef des oben genannten Knotens – Zlatan

Antwort

1

Wenn ich Sie richtig verstehe, dann ist es das, was Sie suchen:

Sie können nur eine enum erstellen, die das gewünschte Element definiert und an die Funktion übergeben. Die Funktion erhält dann das entsprechende Element entsprechend dem Wert 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

Vielen Dank Chef. Arbeitete gut :) außer ich hatte 'typedef enum member_Op member_Op;', ohne dass ein unbekannter Typ Name Fehler aufgetreten ist. Vielen Dank :) – Zlatan

+0

Ja, das ist richtig. Ich habe das Beispiel aktualisiert. – foo

Verwandte Themen