我得到了这个错误;错误:在';{&&x27;token";。我不知道为什么?语法对我来说很好 /*使用结构,编写一个交互式C程序 为BCA的第一学期课程生成成绩卡 你们学习中心的20名学生*/ #包括 结构标记 { 字符主题[5]; 浮动科目分数[5]; }; 结构等级卡 { 字符名[30]; int roll_num; 结构标记表; }; int main() { 学生成绩结构卡; int i; //学生姓名 printf(“输入学生姓名:\t”); scanf(“%s”、&student.name); //学生人数 printf(“输入学生的卷号:\t”); scanf(“%d”、&student.roll\u num); //课程名称 printf(“输入主题:\t”); student.table.subject[5]={'B','C','D','E','F'}; //各科成绩 对于(i=0;i是char 5]类型的复合文字;它也可以写成(char[]){'B','C','D','E','F'},其中元素的数量由大括号之间的初始值设定项的数量决定。它是一个未命名的数组对象

我得到了这个错误;错误:在';{&&x27;token";。我不知道为什么?语法对我来说很好 /*使用结构,编写一个交互式C程序 为BCA的第一学期课程生成成绩卡 你们学习中心的20名学生*/ #包括 结构标记 { 字符主题[5]; 浮动科目分数[5]; }; 结构等级卡 { 字符名[30]; int roll_num; 结构标记表; }; int main() { 学生成绩结构卡; int i; //学生姓名 printf(“输入学生姓名:\t”); scanf(“%s”、&student.name); //学生人数 printf(“输入学生的卷号:\t”); scanf(“%d”、&student.roll\u num); //课程名称 printf(“输入主题:\t”); student.table.subject[5]={'B','C','D','E','F'}; //各科成绩 对于(i=0;i是char 5]类型的复合文字;它也可以写成(char[]){'B','C','D','E','F'},其中元素的数量由大括号之间的初始值设定项的数量决定。它是一个未命名的数组对象,c,struct,typedef,C,Struct,Typedef,我必须对20名学生进行此操作。我想先对一名学生进行此操作。我得到的错误是: 错误:在“{”标记之前应该有表达式 student.table.subject[5]={'B','C','D','E','F'} 对于这一行: /*Using structures, write an interactive C program to generate Grade Card for BCA first semester courses for 20 students of your study cent

我必须对20名学生进行此操作。我想先对一名学生进行此操作。我得到的错误是:

错误:在“{”标记之前应该有表达式
student.table.subject[5]={'B','C','D','E','F'}

对于这一行:

/*Using structures, write an interactive C program to 
generate Grade Card for BCA first semester courses for
20 students of your study centre.*/

#include<stdio.h>

struct Marks
{
    char subject[5];
    float subject_marks[5];
};

struct GradeCard
{
    char name[30];
    int roll_num;
    struct Marks table;

}; 
int main()
{
struct GradeCard student;
int i;

//name of student
printf("Enter the name of student: \t");
scanf("%s", &student.name);

//roll number of student
printf("Enter the roll number of student: \t");
scanf("%d", &student.roll_num);

//name of courses
printf("Enter the subjects: \t");
student.table.subject[5] = {'B', 'C', 'D', 'E', 'F'};

//marks in respective courses
for (i = 0; i < 5; i++)
{
    scanf("%f", &student.table.subject_marks[i]);
}

//printing all the details
printf("%s\n", student.name);
printf("%d\n", student.roll_num);
for(i = 0; i < 5; i++)
{
    printf("%s : %f\n",student.table.subject[i], student.table.subject_marks[i]);
}

}
我猜OP认为行将值分配给数组
student.table.subject[5]
的所有元素,就像
char subject[5]={'B','C','D','E','F'};
初始化数组
subject[5]的所有元素一样
。它们看起来可能类似,但赋值与初始化不同

上面尝试的分配存在一些问题:-

问题1:
{B',C',D',E',F'}
赋值表达式右侧的
{E',F'}
不是任何类型的值。可以通过将其更改为复合文字将其转换为
char[5]
类型的值。
(char[5]){B',C',D',E',F'}/code>是
char 5]类型的复合文字
;它也可以写成
(char[]){'B','C','D','E','F'}
,其中元素的数量由大括号之间的初始值设定项的数量决定。它是一个未命名的数组对象

问题2:在大多数表达式中,数组类型的值转换为指向数组第一个元素的指针,不再是左值。赋值运算符
=
的左操作数必须是左值。因此,赋值运算符的左操作数不能是数组

有多种方法可以解决OP的问题:-

解决方案1:使用
memcpy
从另一个数组复制值:

student.table.subject[5] = {'B', 'C', 'D', 'E', 'F'};
memcpy(student.table.subject, "BCDEF", 5);
或:

(注意:这将使用包含要复制到目标的源数组内容的复合文字。)

或:

(注意:
“BCDEF”
只是为了方便使用。它的类型为
char[6]
,包括空终止符,但仅复制前5个元素。)

解决方案2:使用
for
循环从另一个数组复制值:

student.table.subject[5] = {'B', 'C', 'D', 'E', 'F'};
memcpy(student.table.subject, "BCDEF", 5);

(注意:对于大量的元素,这将变得单调乏味,并且是对可执行内存的低效使用,除非编译器可以将其优化为相当于
memcpy

数组没有赋值运算符。例如,他的语句student.table.subject[5]={B',C',D',E',F'};不正确。事实上,在此语句中,您正试图使用带大括号列表的数组的索引5初始化一个不存在的元素。这不是初始化,而是赋值。5超出了范围-它必须是0…4中的一个。并且您无法为其分配数组-您需要分配一个字符,例如
'D'
static const char subjects[5] = {'B', 'C', 'D', 'E', 'F'};

for (i = 0; i < 5; i++)
{
    student.table.subject[i] = subjects[i];
}
for (i = 0; i < 5; i++)
{
    student.table.subject[i] = ((char []){''B', 'C', 'D', 'E', 'F'})[i];
}
for (i = 0; i < 5; i++)
{
    student.table.subject[i] = "BCDEF"[i];
}
student.table.subject[0] = 'B';
student.table.subject[1] = 'C';
student.table.subject[2] = 'D';
student.table.subject[3] = 'E';
student.table.subject[4] = 'F';