代码出现如图报错,怎么解决

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

#define SIZE_STU 20
#define SIZE_COU 20
#define SIZE_SEL 20
//////////////函数声明部分
void home(void);
void stu_operate(void);
void cou_operate(void);
void statistic(void);
void choose(void);
void delete_sel(int);
//--学生信息部分:
void input_stu(void);
void search_stu(void);
void search_stu_id(void);
void search_stu_name(void);
void show_stu(void);
void edit_stu(void);
void renew_stu(void);
void delete_stu(void);
//--课程信息部分:
void input_cou(void);
void search_cou(void);
void search_cou_id(void);
void search_cou_name(void);
void show_cou(void);
void edit_cou(void);
void renew_cou(void);
void delete_cou(void);

/*学生信息结构体*/
struct student_info {
 char stu_ID[20];
 char stu_name[20];
 char sex[20];
 char age[20];
 char collage[20];
 char grade[20];
 char contact[20];
}stu[SIZE_STU];

/*课程信息结构体*/
struct course_info {
 char course_ID[20];
 char course_name[20];
 char property[20];
 char period[20];
 char credit[20];
 char time[20];
 int people;
}cou[SIZE_COU];


//--------------------------------------课程信息插入--------------------------------------
void input_cou(void){
 char flag;
 FILE * fp;
 //--判断文件是否为空
 fp = fopen("course.txt","r+");
 flag = fgetc(fp);
 if(flag==EOF){
  fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
 }
 fclose(fp);
 //--
 fp = fopen("course.txt","a+");
 if(fp == NULL){
  printf("打开文件失败!");
  system("cls");
  cou_operate();
 }
 printf("代码\t名称\t性质\t总学时\t学分\t开课学期\n");
 while(1){
  j++;
  scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
  //--数据查重
  int h;
  for(h = 0;h < j;h++){
   if(j == 0) break;//第一条数据不需要查重
   if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) {
    printf("该课程号已存在,请重新输入!\n");
    scanf("\n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time);
    h = -1;
   }
  }
  //--
  fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people);
  printf("\n录入成功,继续录入输入y,返回上一级请按任意键:");
  fflush(stdin);
  scanf("%c",&flag);
  fclose(fp);
  if(flag!='y'&&'Y') break;
  fp = fopen("course.txt","a");
 }
 renew_cou();
 system("cls");
 cou_operate();
}
/*查询课程信息*/
void search_cou(void){
 system("cls");
 printf("\n请选择查询方式:");
 printf("\n 1.课程号查询");
 printf("\n 2.课程名查询");
 printf("\n请选择:");
 int h;
 scanf(" %d",&h);
 switch(h){
  case 1:
   search_cou_id();
   break;
  case 2:
   search_cou_name();
   break;

 }
}
/*课程号查询*/
void search_cou_id(void){
 system("cls");
 char id[20];
 printf("\n输入课程号:");
 fflush(stdin);
 scanf("%s",id);
 int h;
 for(h = 0;h <= j;h++){
  if(strcmp(cou[h].course_ID,id)==0){
   system("cls");
   printf("查找成功!");
   printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
   printf("\n\t-----------------------------------------------------------------");
   printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
   system("pause");
   system("cls");
   cou_operate();
  }
 }
 system("cls");
 printf("没有此课程号!\n");
 system("pause");
 system("cls");
 cou_operate();
}
/*课程名查询*/
void search_cou_name(void){
 system("cls");
 char name[20];
 printf("\n输入课程名:");
 fflush(stdin);
 scanf("%s",name);
 int h;
 for(h = 0;h <= j;h++){
  if(strcmp(cou[h].course_name,name)==0){
   system("cls");
   printf("查找成功!");
   printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
   printf("\n\t---------------------------------------------------------");
   printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
   system("pause");
   system("cls");
   cou_operate();
  }
 }
 system("cls");
 printf("没有此课程名!");
 system("pause");
 system("cls");
 cou_operate();
}
/*显示所有课程信息*/
void show_cou(void){
 int h;
 if(j == -1){
  printf("\n还没有录入信息!\n");
  system("pause");
  system("cls");
  cou_operate();
 }
 system("cls");
 printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数");
 printf("\n\t-------------------------------------------------------------");
 for(h = 0;h <= j;h++){
  printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\t\t%d\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people);
 }
 //
 fflush(stdin);
 printf("\n\t1.修改");
 printf("\n\t2.删除");
 printf("\n\t3.返回");
 printf("\n\n 选择要进行的操作:");
 int flag;
 fflush(stdin);
 scanf("%d",&flag);
 switch(flag){
  case 1:
   edit_cou();
   break;
  case 2:
   delete_cou();
   break;
  default:
   system("cls");
   cou_operate();
   break;

 }
}
/*编辑课程信息*/
void edit_cou(void){
 printf("\n输入需要编辑的课程号:");
 char id[20];
 getchar();
 scanf("%s",id);
 int h;
 for(h = 0;h <= j;h++){
  if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
   system("cls");
   printf("\n\n\t代码\t名称\t性质\t总学时\t学分\t开课学期");
   printf("\n\t-------------------------------------------------------------");
   printf("\n\t%s\t%s\t%s\t%s\t%s\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time);
   printf("\n这是修改前的数据,请依次输入修改值:\n\t");
   fflush(stdin);
   scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time);
   int k;
   for(k = 0;k <= j;k++){
    if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){
     if(k==h){
      continue;
     } else {//课程号不唯一
      printf("\n此课程号已存在,重新输入:");
      fflush(stdin);
      scanf("%s",&cou[h].course_ID);
      k = -1;
     }
    }
   }
   /*将修改信息写入文件*/
   //思想:将原文件重新写入一遍
   renew_cou();
   system("cls");
   printf("修改成功!\n");
   system("pause");
   system("cls");
   cou_operate();
  }
 }
 printf("\n此课程号不存在!\n");
 system("pause");
 system("cls");
 cou_operate();
}
/*删除课程信息*/
void delete_cou(void){
 printf("\n输入需要编辑的课程号:");
 char id[20];
 getchar();
 scanf("%s",id);
 int h;
 for(h = 0;h <= j;h++){
  if(strcmp(cou[h].course_ID,id)==0){//找到需要编辑的行
   system("cls");
   //如果只有一条记录
   if(j==0){
    j = -1;
    renew_cou();
    printf("修改成功!\n");
    system("pause");
    system("cls");
    cou_operate();
   }
   //查看是否有人选课
   if(cou[h].people!=0){//有人选课时
    int a;
    for(a = 0;a <= x;a++){
     if(sel[a].c == h){
      delete_sel(a);
      a = -1;
      x--;
      continue;
     }
    }
   }
   int k;
   for(k = h+1;k <= j;k++,h++){//将数组直接向前移动
    strcpy(cou[h].course_ID,cou[k].course_ID);
    strcpy(cou[h].course_name,cou[k].course_name);
    strcpy(cou[h].property,cou[k].property);
    strcpy(cou[h].period,cou[k].period);
    strcpy(cou[h].credit,cou[k].credit);
    strcpy(cou[h].time,cou[k].time);
   }
   /*将修改信息写入文件*/
   //思想:将原文件重新写入一遍
   renew_cou();
   j--;
   system("cls");
   printf("修改成功!\n");
   system("pause");
   system("cls");
   cou_operate();
  }
 }
 printf("\n此课程号不存在!\n");
 system("pause");
 system("cls");
 cou_operate();
}

//--功能函数
/*更新系统数据至文件*/
void renew_stu(void){
 FILE * fp;
 fp = fopen("student.txt","w+");
 if(fp == NULL){
  printf("\n打开文件失败,无法保存至文件。\n");
  fclose(fp);
  return ;
 }
 fprintf(fp,"学号\t姓名\t性别\t年龄\t系别\t班级\t联系方式\n");
 if(i == -1){
  fclose(fp);
  return;
 }
 int h;
 for(h = 0;h <= i;h++){
  fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact);
 }
 fclose(fp);

}
void renew_cou(void){
 FILE * fp;
 fp = fopen("course.txt","w+");
 if(fp == NULL){
  printf("\n打开文件失败,无法保存至文件。\n");
  fclose(fp);
  return ;
 }
 fprintf(fp,"代码\t名称\t性质\t总学时\t学分\t开课学期\t选修人数\n");
 if(j == -1){
  fclose(fp);
  return;
 }
 int h;
 for(h = 0;h <= j;h++){
  fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t\t%s\n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); }
 fclose(fp);

}


img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7474876
  • 你也可以参考下这篇文章:代码是如何编译成程序的?
  • 除此之外, 这篇博客: 约瑟夫环问题【队列实现,循环数组实现】中的 代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int arr[105];
    bool vis[105];
    int main(){
    	int n,k;
    	scanf("%d%d",&n,&k);
    	int i=0,j=0,num=0,cnt=0;
    	while(true){
    		j=i%n+1;
    		if(!vis[j])	num++;//没走过就报数 
    		if(num==k){//当报的数为指定值时,则标记为已出圈 
    			num=0;
    			cnt++;	
    			vis[j]=true;
    			printf("%d ",j);
    			if(cnt==n)	break;
    		}
    		i++;
    	}
    	return 0;
    }
     
    
  • 您还可以看一下 纪佳琪老师的机器学习之线性回归理论与代码实践课程中的 假设函数、损失函数与代价函数小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    对于你遇到的错误信息,需要你提供更具体的信息,例如错误的代码段、报错信息等等才能帮助你解决问题。如果你需要解决该问题,请提供完整信息,然后我会尽力提供帮助。

    关于命令行参数的处理,参考资料提供了一些函数和方法,可以根据具体情况选择使用。如果你确实需要处理长选项,可以参考段落4中介绍的getopt_long函数,实现对长选项的处理。需要注意的是,函数的参数和用法都需要按照函数原型来使用,遵循具体的用法规范。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

非常好问题,爱来自425-1