错误:之前的预期表达式

时间:2016-10-23 05:22:50

标签: c struct

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+"}};

当我编译它时,编译器会出错,错误是,

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

有什么问题?我认为我是对的,但为什么会出错呢?

5 个答案:

答案 0 :(得分:1)

问题是无法像那样分配数组。

尝试从变量声明中拆分类型定义。

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

然后将W定义为;

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

请注意,由于单个"A+"不能表示字符串(由多个字符组成),因此我在第二个字符串中将字符串文字从char更改为char字面值。 / p>

另请注意用于初始化嵌套{}的附加struct对。

如果您想将成绩表示为字符串,请将grade更改为char的数组,而不是char

建议将department成员更改为数组。指针是不同的东西。

最后,请注意,"AB"之类的字符串文字表示为char的数组,其中char的值为'\0'。因此,"AB"表示为三个char的数组,其值为'A''B''\0'

如果您不理解我建议的更改,您需要更仔细地阅读基本文字才能理解。

答案 1 :(得分:0)

试试这个:

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'}};

你必须在nest结构中有一个var。

答案 2 :(得分:0)

您已经宣布W没有,然后您尝试分配给数组。这就是问题 。

同时声明和初始化W。像这样的东西 -

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

此外,您可以更清楚地编写结构声明 -

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

答案 3 :(得分:0)

在此上下文中,W是一个数组,您必须始终使用索引进行初始化 如果在[5]中有5个元素 一个[] = {1}; 在这种情况下,会产生同样的错误......

如果你想初始化

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

应该这样做而不是 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+"}};

您正在创建1个变量并初始化2个值?

始终记住嵌套结构的用法

#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);

}

始终创建一个变量以使用嵌套结构(即上例中的)

答案 4 :(得分:0)

其中代码包含W[],编译器不知道该怎么做。

创建变量时必须进行初始化。 (变量W[1]只包含1个数据实例,而不是2个实例。

通常,最好将结构定义与该结构的任何实例分开。

所以,首先定义结构:

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

然后声明struct的任何实例:

struct student R[1];
struct student W[] = 
{
    {"Saud Farooqui",137,"Electronics",3.05,'A'},
    {"Talha Farooqui",129,"Civil",3.5,"A+"}
};
顺便说一句:通常最好不要尝试将所有内容集中到一行代码中

为了清楚起见,我建议包括嵌入式结构的内部大括号,如:

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

然而,还有一个问题,数据

此字段char grade;被声明为单个字符;但是,Talha&#39;的数据。正在显示一个char "A+"

数组

要处理该char数组,首先需要将struct定义更改为:

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

然后修改数据,以便始终拥有任何等级的数字&#39;字段:

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

注意&#39;等级&#39;的数据。 field现在总是一个数组。