像函数一样的结构指针?

问题描述 投票:0回答:1

好,所以我想定义一个结构指针并希望它返回一个匹配项。这里是功能及其作用

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卡住了。您能帮忙吗?

c pointers struct function-pointers
1个回答
0
投票

希望您过得愉快

因此,根据我的理解,findStudentbyID应该返回指向学生的指针,因此其返回类型应该为struct Student *而不是Student *,并且在该函数内部,如果if与之匹配则应返回&myStudentArray[i]对于setgradeofStudent id不能使用该函数的结果,结果应为struct student类型的指针,并使用间接(*)id赋予其自身无法使用的结构,导致其类型为int您应该在其中声明一个类型为struct Student *的变量,并让其接收findStudentByID并相应地修改该变量,这就是为什么您在这里需要函数指针(如果不需要的话)将其删除,这只会使您的结构混乱。

我希望这会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.