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[]);