Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用指针链接两个结构?_C_Loops_Pointers_Struct - Fatal编程技术网

C 如何使用指针链接两个结构?

C 如何使用指针链接两个结构?,c,loops,pointers,struct,C,Loops,Pointers,Struct,在c语言中,此问题需要指针,但我无法理解如何使用指针链接课程和学生结构。程序需要AddCourse操作,获取课程id和学生id,然后再次循环AddCourse,如果我写入退出,则停止循环并打印学生获取的课程和结构信息。问题是: 结构必须由用户输入填写。填充结构后,您可以 将允许用户让任何学生注册课程列表中的任何课程。提示:实现 在这些步骤中,您必须在学生结构中使用指针将其链接到课程结构” 我为预期的节目输出添加照片请打开这两个图像和两个图像是相互依赖的 这是我不完整的代码,因为我如何用指针链

在c语言中,此问题需要指针,但我无法理解如何使用指针链接课程和学生结构。程序需要AddCourse操作,获取课程id和学生id,然后再次循环AddCourse,如果我写入退出,则停止循环并打印学生获取的课程和结构信息。问题是:

结构必须由用户输入填写。填充结构后,您可以 将允许用户让任何学生注册课程列表中的任何课程。提示:实现 在这些步骤中,您必须在学生结构中使用指针将其链接到课程结构”

我为预期的节目输出添加照片请打开这两个图像和两个图像是相互依赖的

这是我不完整的代码,因为我如何用指针链接两个结构

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

struct student
{
    char name[50],surname[50];
    int  id,year;
};

struct Courses{
    char course_name[50];
    int course_id,course_credit;
};

int main(){
    struct student std[2];
    struct Courses crs[4];
    
    printf("enter information of students:\n");
    for(int i=0; i<2;i++){
        printf("Enter student id:");
        scanf("%d",&std[i].id);
        printf("Enter first name:");
        scanf("%s",std[i].name);
        printf("Enter last name:");
        scanf("%s",std[i].surname);
        printf("Enter year:");
        scanf("%d",&std[i].year);
        printf("\n");
    }
    printf("Enter information of courses:\n");
    for (int i = 0; i < 4; i++)
    {
        printf("course id:");
        scanf("%d",&crs[i].course_id);
        printf("course name:");
        scanf("%s",&crs[i].course_name);
        printf("course credit:");
        scanf("%d",&crs[i].course_credit);
        printf("\n");
    }
    printf("-Displaying Courses-\n");
    for(int i=0; i<4;i++){
        printf("course id:%d\n",crs[i].course_id);
        printf("course name :%s\n",crs[i].course_name);
        printf("course credit:%d",crs[i].course_credit);
        printf("\n");
    }
    printf("-Display Students-\n");
    for(int i=0; i<2;i++){
        printf("student id:%d\n",std[i].id);
        printf("student name and surname:%s %s\n",std[i].name,std[i].surname);
        printf("year:%d",std[i].year);
        printf("\n");
    }
    return 0;
}
#包括
#包括
结构学生
{
姓名[50],姓氏[50];
int id,年份;
};
结构课程{
char course_name[50];
国际课程id、课程学分;
};
int main(){
结构学生标准[2];
结构课程crs[4];
printf(“输入学生信息:\n”);

对于(int i=0;i您需要第三个数据结构来链接学生和课程

正如@tadman所提到的,链表是一种可用于此目的的数据结构类型。有关实现的一个版本,请参阅

此外,还列出了一些其他常用的方法。您应根据自己的要求(例如排序、插入/删除等)选择一种方法

除了你的问题,这里有一个简短的(非详尽的)清单,你可以根据你发布的代码来考虑一些事情:

  • 除了数组之外,还可以为“std”和“crs”使用另一个数据结构。在此数据结构中,您可以使用辅助函数来封装当前主函数中的许多行(例如printcurses())

  • 在使用scanf函数时,可能会出现非故意和未定义的行为。请参阅和

  • 使用类似于#define MAX_name_LENGTH 50和name[MAX_name_LENGTH]的内容,而不是硬编码数组大小(例如name[50])


  • 最简单的方法是某种链表结构,你可以将
    学生
    链接起来。提示:尝试保持你的案例惯例一致。看到小写的
    学生
    和大写的
    课程
    很奇怪。另外,“课程”(复数)代表一门课程也很奇怪。