好,所以我想定义一个结构指针并希望它返回一个匹配项。这里是功能及其作用
void createNewStudent(struct Course *myCourse);
void setGradeOfStudent(struct Course *myCourse);
void findAndDisplayAverage(struct Course *myCourse);
struct Student * findStudentByID(int id, struct Course *myCourse);
这是他们的工作(应该做);
createNewStudent:提示用户输入新学生的姓名,姓氏和ID。用户输入的值将分配给位于myCourse指向的课程变量的myStudentArray。 currentStudentCount将被更新这样就可以指定为接下来插入的学生分配的插槽。
setGradeOfStudent:将会提示用户输入其成绩将要被设置。将会调用findStudentByID来查找与指定标识相对应的学生。
findAndDisplayAverage:将会提示用户输入其学生的ID将计算平均值。将调用findStudentByID查找对应的学生到指定的ID。计算出的平均值将分配给显示之前的学生。
findStudentByID:在myCourse指向的课程变量中遍历myStudentArray查找其id与id匹配的学生,id是此函数的参数。如果一个存在匹配的学生,findStudentByID返回其指针,否则返回NULL。
我的问题是,findStudentByID
结构指针我无法弄清楚声明以及return语句,这是我尝试过的内容
#include <string.h>
#include <stdio.h>
struct Student{
char name[50];
char lastname[50];
int id;
int mid1;
int mid2;
int final;
double average;
};
struct Course {
char courseName[50];
char courseCode[50];
struct Student myStudentArray[5];
struct Student * findStudentByID(int id, struct Course *myCourse);
int currentstudentcount;
};
void createNewStudent(struct Course *myCourse);
void setGradeOfStudent(struct Course *myCourse);
struct Student * findStudentByID(int id, struct Course *myCourse);
主要和功能
int main(){
struct Course myCourse;
int input=0;
scanf("%d",&input);
if(input == 1){
createNewStudent(&myCourse);
}
if(input == 2){
setGradeOfStudent(&myCourse);
}
return 0;
}
void createNewStudent(struct Course *myCourse){
myCourse->currentstudentcount=0;
printf("Enter name: ");
scanf ("%s", myCourse->myStudentArray[myCourse->currentstudentcount].name);
printf("Enter Surname: ");
scanf ("%s", myCourse->myStudentArray[myCourse->currentstudentcount].lastname);
printf("Enter id: ");
scanf ("%d",&myCourse->myStudentArray[myCourse->currentstudentcount].id);
myCourse->currentstudentcount++;
//This should be correct
}
void setGradeOfStudent(struct Course *myCourse){
int num;
int *id;
printf("ID:");
scanf("%d",&num);
id = findStudentByID(num, &myCourse);
// I cant test this because it relies on `*findStudentByID`
}
struct Student *findStudentByID(int id, struct Course *myCourse){
for (int i = 0; i < 5; i++) {
if(id == myCourse->myStudentArray[i].id){
break;
}
}
//This is incomplete
}
而且我不明白为什么我们不能这样声明一个指针。我的意思是它指向学生结构?我只需要从myStudentArray
中找到其id与用户在setGradeOfStudent
中输入的ID相匹配的学生,然后返回该学生的地址,但Im卡住了。您能帮忙吗?
希望您过得愉快
因此,根据我的理解,findStudentbyID应该返回指向学生的指针,因此其返回类型应该为struct Student *
而不是Student *
,并且在该函数内部,如果if与之匹配则应返回&myStudentArray[i]
对于setgradeofStudent
id不能使用该函数的结果,结果应为struct student类型的指针,并使用间接(*)id赋予其自身无法使用的结构,导致其类型为int您应该在其中声明一个类型为struct Student *的变量,并让其接收findStudentByID
并相应地修改该变量,这就是为什么您在这里需要函数指针(如果不需要的话)将其删除,这只会使您的结构混乱。
我希望这会有所帮助