2016-10-23 5 views
0
struct student{ 
char name[100]; 
int id; 
char *department; 
struct result{ 
    float gpa; 
    char grade; 
}; 
}W[1],R[1]; 
W[] = {{"Saud Farooqui",137,"Electronics",3.05,'A'}, 
     {"Talha Farooqui",129,"Civil",3.5,"A+"}}; 

Wenn ich es bin Kompilieren Compiler einen Fehler gibt, ist der Fehler,Fehler: erwartete Ausdruck vor

error: expected expression before ‘]’ token 
W[] = { 

, was ist das Problem? Ich denke, ich habe Recht, aber warum gibt es den Fehler?

+0

Soll 'W' einen oder zwei Einträge enthalten? –

Antwort

0

versuchen Sie dies:

struct student{ 
    char name[100]; 
    int id; 
    char *department; 
    struct result{ 
     float gpa; 
     char grade; 
    } resultStruct; 
} W[2] = 
{{"Saud Farooqui",137,"Electronics",3.05,'A'}, 
     {"Talha Farooqui",129,"Civil",3.5,'A'}}; 

Sie eine var in einem Nest Struktur haben muss.

+0

Was ist das Problem, wenn ich W [2] etwas wo sonst im Code dekline oder deklariere es mit einigen Eingaben von stdin ?? –

0

Sie bereits W erklärt hat, nicht wahr, und dann versuchen, Sie zu einem Array zuweisen. Das ist das Problem .

Do Deklaration und Initialisierung von W zur gleichen Zeit. So etwas wie this-

struct student A[]={{"Saud Farooqui",137,"Electronics",{3.05,'A'}}, 
       {"Talha Farooqui",129,"Civil",{3.5,'B'}}}; 

Auch könnten Sie Ihre Struktur Erklärungen deutlicher schreiben -

struct result{ 
    float gpa; 
    char grade[3]; 
}; 
struct student{ 
    char name[100]; 
    int id; 
    char *department; 
    struct result x; 
}W[1],R[1]; 
+0

Warum mache ich Deklaration und Initialisierung gleichzeitig? Wenn ich W [] –

+0

W [] irgendwo anders benutzen möchte, was würde ich in diesem Fall tun? –

+0

Wenn ich ein Array des Typs struct dekalieren und initialisieren will, was ist dann das Problem? –

1

Das Problem ist, dass Arrays können nicht so zugeordnet werden.

Versuchen Sie, die Typdefinition von der Deklaration der Variablen zu trennen.

struct student 
{ 
    char name[100]; 
    int id; 
    char *department; 
    struct the_result 
    { 
     float gpa; 
     char grade; 
    } result; 
}; 

und dann definieren W as;

struct student W[] = 
    { 
     {"Saud Farooqui",137,"Electronics", {3.05,'A'}}, 
     {"Talha Farooqui",129,"Civil", {3.5, 'A'}} 
    }; 

beachte, dass ich Stringliteral um von "A+" mit einem char Literal in den zweiten nicht geändert haben, da ein einzigen char keinen String darstellen kann (die aus mehreren Zeichen bestehen).

Beachten Sie auch das Paar zusätzliche {} für die Initialisierung der verschachtelten struct.

Wenn Sie Noten als Zeichenfolgen darstellen möchten, ändern Sie grade in ein Array von char, nicht eine einzige char.

Es ist wahrscheinlich ratsam, das department Mitglied ändert auch ein Array sein. Ein Zeiger ist etwas anderes.

Schließlich beachten Sie, dass ein String-Literal wie "AB" als ein Array von char mit einem zusätzlichen char Wert '\0' dargestellt wird. So "AB" ist als eine Anordnung von drei char mit Werten dargestellt 'A', 'B' und '\0'.

Wenn Sie die Änderungen nicht verstehe ich vorgeschlagen haben, müssen Sie genauer einen grundlegenden Text lesen, zu verstehen.

0

Hier in diesem Zusammenhang W ist ein Array und Sie müssen immer einen Index zu initialisieren Wenn es 5 Elemente int a [5] a [] = {1}; In diesem Zusammenhang wird der gleiche Fehler erzeugt .....

wenn Sie wollen

int initialisieren a [] = {1,2,3,4};

Sollte dies tun und nicht int a [5]; a [] = {1,2,3,4,5}

W[1],R[1]; 
W[] = {{"Saud Farooqui",137,"Electronics",3.05,'A'}, 
    {"Talha Farooqui",129,"Civil",3.5,"A+"}}; 

Sie erstellen 1 Variable und 2 Werte zu initialisieren?

Und immer daran denken, die Verwendung von verschachtelten Strukturen

#include<stdio.h> 
struct student 
{ 
    char *name; 
    struct marks 
    { 
     int eng; 
     int marks; 
    }m; 
}v={"StackOverFlow",35,56}; 
void main() 
{ 
    printf("%s\n",v.name); 
    printf("%d\n",v.m.eng); 
    printf("%d\n",v.m.marks); 

} 

immer eine Variable erstellen verschachtelte Struktur (dh m in obigem Beispiel) verwenden

0

, wo der Code enthält W[] die Compiler haben keine Ahnung, was zu machen.

Die Initialisierung muss durchgeführt werden, wenn die Variable erstellt wird. (Und die Variable W[1] enthalten nur 1 Instanz von Daten, nicht zwei Instanzen

In der Regel am besten, die Struktur Definition getrennt von allen Instanzen dieser Struktur zu halten

So definiert zunächst die Struktur:..

struct student 
{ 
    char name[100]; 
    int id; 
    char *department; 
    struct result 
    { 
     float gpa; 
     char grade; 
    }; 
}; 

erklären dann alle Instanzen der Struktur:

struct student R[1]; 
struct student W[] = 
{ 
    {"Saud Farooqui",137,"Electronics",3.05,'A'}, 
    {"Talha Farooqui",129,"Civil",3.5,"A+"} 
}; 

BTW: es ist in der Regel am besten, nicht versuchen, und drängen sich alles in ein Zeile Code

für Klarheit, empfehle ich mit dem inneren Satz von Klammern für die Embedded-Struktur, wie in:

struct student W[] = 
{ 
    {"Saud Farooqui",137,"Electronics",{3.05,'A'}}, 
    {"Talha Farooqui",129,"Civil",{3.5,"A+"}} 
}; 

Allerdings gibt es ein weiteres Problem, mit den Daten

Dieses Feld char grade; wird als ein einzelnes Zeichen deklariert; jedoch werden die Daten für ‚Talha‘ zeigen ein Array von char "A+"

diejenigen Array von char handhaben, wird zuerst die struct Definition geändert werden muss, um:

struct student 
{ 
    char name[100]; 
    int id; 
    char *department; 
    struct result 
    { 
     float gpa; 
     char grade[3]; 
    }; 
}; 

und dann die Daten ändern, um immer haben keine Array für die ‚Klasse‘ Feld:

struct student W[] = 
{ 
    {"Saud Farooqui",137,"Electronics",{3.05,"A"}}, 
    {"Talha Farooqui",129,"Civil",{3.5,"A+"}} 
}; 

Beachten Sie die Daten für die ‚Klasse‘ Feld jetzt immer ein Array ist.

Verwandte Themen