【问题标题】:error: expected expression before错误:之前的预期表达式
【发布时间】:2016-10-23 05:22:49
【问题描述】:
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[] = { 

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

【问题讨论】:

  • W 应该包含一个或两个条目吗?

标签: c struct


【解决方案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 不能代表字符串(由多个字符组成)。

还要注意一对附加的{},用于初始化嵌套的struct

如果要将成绩表示为字符串,请将@​​987654329@ 更改为char 的数组,而不是单个char

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

最后,请记住,像 "AB" 这样的字符串字面量表示为 char 的数组,另外还有一个值为 '\0'char。所以"AB" 表示为三个char 的数组,其值为'A''B''\0'

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

【讨论】:

    【解决方案2】:

    试试这个:

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

    嵌套结构中必须有一个 var。

    【讨论】:

    • 如果我在代码中的其他地方删除 W[2] 或使用标准输入的一些输入声明它,会有什么问题??
    【解决方案3】:

    您已经声明了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];
    

    【讨论】:

    • 为什么要同时声明和初始化?如果我想要 W[ ]
    • W[ ] 要在其他地方使用,那么在这种情况下我该怎么办?
    • 如果我想 decalre 并初始化一个 struct 类型的数组,那么有什么问题
    • @SaudFarooqui 我显然不明白你的意思。 W[] 是什么意思?和你最后一点,我所说的同样的事情。要存储结构的数据,您需要声明结构数组。
    • *单独的结构类型
    【解决方案4】:

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

    如果你想初始化

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

    应该这样做而不是 诠释一个[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);
    
    }
    

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

    【讨论】:

      【解决方案5】:

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

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

      一般来说,最好将结构定义与该结构的任何实例分开。

      所以,首先定义结构体:

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

      然后声明结构的任何实例:

      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”的数据显示了一个字符数组 "A+"

      要处理该字符数组,首先需要将结构定义更改为:

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

      然后将数据修改为“等级”字段始终具有任何数组:

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

      请注意,“等级”字段的数据现在始终是一个数组。

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 1970-01-01
        • 2023-04-11
        • 2014-04-20
        • 2015-03-28
        • 2021-02-19
        • 2019-09-23
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多