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[] = {
有什么问题?我认为我是对的,但为什么会出错呢?
答案 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现在总是一个数组。