我刚开始学习C并且不确定这里的问题是什么。
修改
#include <stdio.h>
int main (int argc, const char * argv[]) {
struct student {
int age;
char gender;
char course[30];
};
defineNewStudent("Jarryd", 24, 'M', "Software Engineering");
return 0;
}
void defineNewStudent(char studentName[20], int age, char gender, char course[30])
{
student studentName[30];
studentName.age = age;
studentName.gender = gender;
studentName.course = course[20];
printf("%s is %d.\n Gender: %c.\n Course: %s.\n", studentName, studentName.age, studentName.gender, studentName.course);
}
我有警告
警告:隐式声明函数'defineNewStudent'
我正在尝试使用传入的参数并使用它来命名结构,这是如何完成的?
这是什么警告以及后果是什么?
由于
答案 0 :(得分:3)
C没有方法。您正在尝试在函数中定义函数。你不能在main()中声明一个函数。
你也可以在defineNewStudent()中声明两次studentName,一次作为第一个参数,并在其中声明一些具有相同名称的内容。
同时指定studentName.course =课程也不起作用。你必须做类似的事情
strncpy(studentName.course,course,sizeof(studentName.course));
您必须在使用之前定义该功能。你可以在main之前移动整个东西,这就是我要做的,或者你可以在main之前包含它的原型,这将是:
void defineNewStudent(char studentName[20], int age, char gender, char course[30]);
答案 1 :(得分:2)
你有一些问题 - 对于一个人来说,嵌套函数可能是一个坏主意。取defineNewStudent()
并将其放在main()
之外。根据您放置它的位置(在main()
之前或之后),您可能还需要在main()
中的呼叫站点之前使用函数原型。
此外,您需要将defineNewStudent()
的数组参数声明更改为char parameterName[20]
,而不是您拥有的声明。
你也会遇到一些问题studentName
是两个不同变量的名称,尝试使用简单的赋值复制字符串,并且"Software Engineering"
太大而不适合你的阵列。
正如@arsenm在他的回答中提到的那样,C没有方法。
答案 2 :(得分:1)
错误似乎是因为结构student
仅在函数main
内定义。您正试图在defineNewStudent
函数中使用它,但那里没有定义该结构。在全局范围内定义结构。
警告是因为你试图在实际声明它之前调用defineNewStudent
函数,并且编译器在那时仍然不知道它。您可以在尝试使用它之前声明该函数。
// define the student struct at global scope
struct student
{
int age;
char gender;
char course[20];
};
// declare the function (it can still be defined later)
void defineNewStudent(char studentName[20], int age, char gender, char course[20]);
int main (int argc, const char * argv[])
{
defineNewStudent("Jarryd", 24, 'M', "Software Engineering");
return 0;
}
void defineNewStudent(char studentName[20], int age, char gender, char course[20])
{
// you already have a variable called studentName,
// you can't have two variables with the same name
struct student studentData;
studentData.age = age;
studentData.gender = gender;
studentData.course = course;
printf("%s is %d.\n Gender: %c.\n Course: %s.\n",
studentName,
studentData.age,
studentData.gender,
studentData.course
);
}
编辑:
在C中定义结构的实例需要struct
关键字,因此在示例中它应该是
struct student studentData;
studentData.age = age;
studentData.gender = gender;
studentData.course = course;
如果是c ++ ,您可以删除struct
关键字:
student studentData;
studentData.age = age;
studentData.gender = gender;
studentData.course = course;
可选地在C中,您可以将结构解析为别名,以便更容易定义它的实例:
typedef struct student
{
int age;
char gender;
char course[20];
} StudentStruct;
// define it like this in the function:
StudentStruct studentData;
答案 3 :(得分:0)
我同意卡尔的观点。实际上你必须在使用之前定义函数,并且要么将函数放在main()之上,要么在main之前放置一个函数原型:
void defineNewStudent(char studentName [20],int age,char gender,char course [20]);
main()的 ......代码的其余部分
由于参数和函数的局部变量具有相同的名称会导致编译器错误,因此您还会遇到一个问题。 C中也有函数而不是方法(在JAVA / C ++等中)