2016-12-21 7 views
-1

Betrachten Sie den Code:Struct Variable und struct Mitglied in Funktionsdefinition

#define STRINGMAX 50 

struct GIFTS { 
    char whofor[STRINGMAX]; 
    char city[STRINGMAX]; 
    float weight; 
    struct DIMENSIONS { 
     float width; 
     float length; 
     float height; 
    } dim; 
} gifts[STRINGMAX]; 

Und Funktionsdefinition:

void takeString(char * structvar, char structarr[], int arrpos) { 
    while (scanf("%[^\n]%*c]", structarr[arrpos].structvar) != EOF) { 
     scanf("%[^\n]%*c]", structarr[arrpos].structvar); 
    } 

} 

Es gibt mir eine Fehlermeldung:

request for member ‘structvar’ in something not a structure or union

Gibt es eine Möglichkeit in diesem Fall ein Strukturelement übergeben? Ich habe hier ähnliche Themen gesehen, aber ich konnte diese Ideen nicht in meinen Code einbringen (ich bin ein kompletter C Anfänger). Ich würde jede Hilfe, besonders ein klares Beispiel im Code schätzen.

Btw. Ich weiß, dass ich scanf nicht benutzen sollte, aber es ist nur zum Beispiel. Ich werde etwas anderes tun, wenn ich weiß, wie man das Strukturelement im Funktionsparameter übergeben kann.

+0

'structarr' ist vom Typ' char * ', hast du meine' structvar'? –

+0

Nicht auf Ihr Problem bezogen, aber Ihre Loop-Leseeingabe erfordert, dass der Benutzer die gleichen Daten * zweimal * eingibt. –

+0

Da keiner der Funktionsparameter eine Struktur ist, macht diese Frage keinen Sinn. Bitte bearbeiten Sie es, damit klar wird, was Sie meinen. – Lundin

Antwort

0

Wie für Ihr Problem (wie ich es verstehe), kann es wirklich nicht getan werden. Überlegen Sie, ob die Funktion takeString nur ein einzelnes String-Argument annimmt und die Eingabe in diese Zeichenfolge liest.

Dann übergeben Sie die richtige Zeichenfolge aus dem Array und Struktur auf die Funktion. Dies kann durch eine andere Funktion durchgeführt werden, die einen Zeiger (oder einen Index) auf die zu lesende Struktur nimmt.

Vielleicht so etwas wie dieses Pseudo-Code:

void takeString(char *string) 
{ 
    scanf("...", string); 
} 

void takeStructure(int arrayIndex) 
{ 
    ... 
    takeString(gifts[arrayIndex].city); 
    ... 
} 
+0

Daran arbeite ich! Es ist also nicht möglich, in Funktionsargumenten member (in diesem Beispiel über member 'city') zu übergeben. –

+0

@angrysomoan Nein, es ist nicht möglich, das Symbol eines Mitglieds zu übergeben. –