C中请求的非标量类型

C中请求的非标量类型,c,C,当我试图编译这段代码时,出现了一个错误:转换为请求的非标量类型。此错误涉及第行: func( record); 我可以知道我的密码有什么问题吗 #include <stdio.h> #include <string.h> struct student { int id; char name[30]; float percentage; }; void func(struct student record); int main() { struct s

当我试图编译这段代码时,出现了一个错误:转换为请求的非标量类型。此错误涉及第行:

func( record);
我可以知道我的密码有什么问题吗

#include <stdio.h>
#include <string.h>

struct student 
{
 int id;
 char name[30];
 float percentage;
};
void func(struct student record); 

int main() 
{

 struct student record[2];
 func( record);
 return 0;
 }     

 void func(struct student record[]) {
 int i;
 record[0].id=1;
 strcpy(record[0].name, "lembu");
 record[0].percentage = 86.5;


 record[1].id=2;
 strcpy(record[1].name, "ikan");
 record[1].percentage = 90.5;


 record[2].id=3;
 strcpy(record[2].name, "durian");
 record[2].percentage = 81.5;

 for(i=0; i<3; i++)
 {
     printf("     Records of STUDENT : %d \n", i+1);
     printf(" Id is: %d \n", record[i].id);
     printf(" Name is: %s \n", record[i].name);
     printf(" Percentage is: %f\n\n",record[i].percentage);
 }

}
#包括
#包括
结构学生
{
int-id;
字符名[30];
浮动百分比;
};
void func(结构学生记录);
int main()
{
结构学生记录[2];
func(记录);
返回0;
}     
void func(结构学生记录[]){
int i;
记录[0]。id=1;
strcpy(记录[0]。名称,“lembu”);
记录[0]。百分比=86.5;
记录[1]。id=2;
strcpy(记录[1]。名称,“ikan”);
记录[1]。百分比=90.5;
记录[2]。id=3;
strcpy(记录[2]。名称“榴莲”);
记录[2]。百分比=81.5;

对于(i=0;i您的
func
原型说:

void func(struct student record); 
应该是:

void func(struct student record[]);

这是因为您有冲突的函数声明

void func(struct student record[])
相当于

void func(struct student * record)
但你最初的声明是

void func(struct student record); 

在声明函数时,您可以这样做:

void func(struct student record);
但是当你使用它的时候,你通过了一个

struct student record[2];
而你却把at定义为

 void func(struct student record[]) {
到那时已经太晚了,编译器将接受声明,而不管后面的定义如何

在声明中添加[]:

void func(struct student record[]);
我做了一些改变

 void func(struct student record[]); 

完整代码:

 #include <stdio.h>
 #include <string.h>

 struct student 
 {
     int id;
     char name[30];
     float percentage;
  };
 void func(struct student record[]); 

 int main() 
 {
     struct student record[3];
     func( record);
     return 0;
 }     

 void func(struct student record[]) {
     int i;
     record[0].id=1;
     strcpy(record[0].name, "lembu");
     record[0].percentage = 86.5;


     record[1].id=2;
     strcpy(record[1].name, "ikan");
      record[1].percentage = 90.5;


      record[2].id=3;
      strcpy(record[2].name, "durian");
      record[2].percentage = 81.5;

      for(i=0; i<3; i++)
      {
          printf("     Records of STUDENT : %d \n", i+1);
          printf(" Id is: %d \n", record[i].id);
          printf(" Name is: %s \n", record[i].name);
          printf(" Percentage is: %f\n\n",record[i].percentage);
      }

 }
#包括
#包括
结构学生
{
int-id;
字符名[30];
浮动百分比;
};
void func(结构学生记录[]);
int main()
{
结构学生记录[3];
func(记录);
返回0;
}     
void func(结构学生记录[]){
int i;
记录[0]。id=1;
strcpy(记录[0]。名称,“lembu”);
记录[0]。百分比=86.5;
记录[1]。id=2;
strcpy(记录[1]。名称,“ikan”);
记录[1]。百分比=90.5;
记录[2]。id=3;
strcpy(记录[2]。名称“榴莲”);
记录[2]。百分比=81.5;

对于(i=0;i发生错误是因为编译器在匹配
func
的实际参数和形式参数时无法从
student*
转换到
student

在函数原型中,参数是用类型
student
声明的。在定义中,它被声明为数组,在C中衰减为指针

修复函数原型,使其准确声明所需内容:

void func(struct student record[]); 

修复您的函数声明,如果要向其传递一个记录数组,它应该包括
[]
void func(struct student record[]);