秋浸月 2023-12-30 20:08 采纳率: 46.2%
浏览 2

为什么会有那么多报错阿

上午没报错的程序,下午运行了一下,突然十多个报错,为啥阿

img

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

struct Course
{
    int arr1;                    //迟到次数 
    int arr2;                    //早退次数 
    int arr3;                    //请假次数 
    int arr4;                    //旷课次数 
};


typedef struct xuesheng
{
    char name[22];                //学生姓名 
    int number;                    //学生学号 
    float date;                    //日期 
    int num1;                    //第几节课 
    char course[30];            //课程名字 
    int num2;                    //打卡次数 
    struct Course absence;        //缺课类型 
}Stu;


typedef struct system
{
    Stu* student;                
    int size;                    //当前系统储存学生个数
    int Maxsize;                //当前系统可以存储学生的最大个数
}Sys;

void mune();                                            //功能菜单
void keydown(Sys *p,char* filename);                    //按键交互
Sys* createsystem(int maxsize);                            //系统创建
void Inputstudentdata(Stu data);                        //录入学生数据
void Inputsystem(Sys* p, Stu data);                        //数据录入系统
void Print(Sys* p);                                        //打印功能
void Search(Sys* p);                                    //查询信息功能
void Change(Sys* p);                                    //修改信息功能
void Delete(Sys* p);                                    //删除信息功能
void Statistics(Sys* p);                                //统计信息功能
void CreateFile(char* filename)                            //创建文件
void Savefile(Sys* p, char* filename);                    //储存信息功能
void Readfile(Sys* p, char* filename);                    //文件数据读出



//创建系统
Sys* createsystem(int maxsize)
{
    Sys* p = (Sys *)malloc(sizeof(Sys) * maxsize);
    p->size = 0;
    p->Maxsize = maxsize;
    p->student = (Stu* )malloc(sizeof(Stu) * maxsize);
    return p;
}

//功能菜单
void mune()
{
    printf("****************************************\n");
    printf("*          1、输入记录模块             *\n");
    printf("*          2、查询记录模块             *\n");
    printf("*          3、修改记录模块             *\n");
    printf("*          4、删除记录模块             *\n");
    printf("*          5、统计记录模块             *\n");
    printf("*          6、输出记录模块             *\n");
    printf("*          7、正常退出系统             *\n");
    printf("************请输入(0-7)***************\n");
}

//实现选择操作
void keydown(Sys* p,char* filename)    
{
    Stu data;
    int key;
    printf("请输入需要操作的命令:\n");
        scanf("%d", &key);
        switch (key)
        {
        case 1:
            printf("输入学生信息:\n");
            printf("请输入学生的姓名:\n");
            scanf("%s", data.name);
            printf("请输入学生的学号:\n");
            scanf("%d", &data.number);
            printf("请输入学生的打卡的日期:\n");
            scanf("%f", &data.date);
            printf("请输入学生的打卡的第几节课:\n");
            scanf("%d", &data.num1);
            printf("请输入学生的打卡的课程名字:\n");
            scanf("%s", data.course);
            printf("请输入学生的打卡次数:\n");
            scanf("%d", &data.num2);
            printf("缺课类型(迟到、早退、请假、旷课):\n");
            printf("请输入学生的迟到次数:\n");
            scanf("%d", &data.absence.arr1);
            printf("请输入学生的早退次数:\n");
            scanf("%d", &data.absence.arr2);
            printf("请输入学生的请假次数:\n");
            scanf("%d", &data.absence.arr3);
            printf("请输入学生的旷课次数:\n");
            scanf("%d", &data.absence.arr4);
            Inputsystem(p, data);
            Savefile(p, filename);
            break;
        case 2:
            Readfile(p, filename);
            Search(p);
            break;
        case 3:
            Readfile(p, filename);
            Change(p);
            break;
        case 4:
            Readfile(p, filename);
            Delete(p);
            break;
        case 5:
            Readfile(p, filename);
            Statistics(p);
            break;
        case 6:
            Readfile(p, filename);
            Print(p);
            break;
        case 7:
            printf("安全退出系统");
            exit(0);
            break;
        default:
            printf("输入错误,请重新输入.\n");
            break;
        }
    }

//录入学生数据
void Inputstudentdata(Stu data)
{
    printf("输入学生信息:\n");
    printf("请输入学生的姓名:\n");
    scanf("%s", data.name);
    printf("请输入学生的学号:\n");
    scanf("%d", &data.number);
    printf("请输入学生的打卡的日期:\n");
    scanf("%f", &data.date);
    printf("请输入学生的打卡的第几节课:\n");
    scanf("%d", &data.num1);
    printf("请输入学生的打卡的课程名字:\n");
    scanf("%s", data.course);
    printf("请输入学生的打卡次数:\n");
    scanf("%d", &data.num2);
    printf("缺课类型(迟到、早退、请假、旷课):\n");
    printf("请输入学生的迟到次数:\n");
    scanf("%d", &data.absence.arr1);
    printf("请输入学生的早退次数:\n");
    scanf("%d", &data.absence.arr2);
    printf("请输入学生的请假次数:\n");
    scanf("%d", &data.absence.arr3);
    printf("请输入学生的旷课次数:\n");
    scanf("%d", &data.absence.arr4);
}

//数据输入系统
void Inputsystem(Sys* p,Stu data)
{
    if (p == NULL)
    {
        printf("系统不存在\n");
        return;
    }
    if (p->size >= p->Maxsize)
    {
        printf("系统已满,不能录入\n");
        return;
    }
    p->student[p->size] = data;
    p->size++;
}

//打印学生数据
void Print(Sys* p)
{
    int i;
    printf("记录序号\t姓名\t学号\t日期\t第几节课\t课程名字\t打卡次数\t迟到\t早退\t请假\t旷课\n");
    for (i = 0; i < p->size; i++)
    {
        printf("%8d\t%s\t%d\t%4.2f\t%8d\t%s\t\t%d\t\t%1d\t%1d\t%1d\t%1d\n", i, p->student[i].name,
            p->student[i].number, p->student[i].date, p->student[i].num1, p->student[i].course,
            p->student[i].num2, p->student[i].absence.arr1, p->student[i].absence.arr2,
            p->student[i].absence.arr3, p->student[i].absence.arr4);
    }
}

//查询信息功能
void Search(Sys* p)
{
    int n, i;
    printf("请输入要查找学生的学号:\n");
    scanf("%d", &n);
    for (i = 0; i < p->size; i++)
    {
        if (n == p->student[i].number)
        {
            printf("姓名:%s\t学号:%d\t打卡次数:%d\t\n", p->student[i].name, p->student[i].number, p->student[i].num2);
            printf("迟到次数:%d\t早退次数:%d\t请假次数:%d\t旷课次数:%d\n", p->student[i].absence.arr1, p->student[i].absence.arr2, p->student[i].absence.arr3,
                p->student[i].absence.arr4);
            if (i == p->size - 1)
            {
                break;
            }
        }
    }
    if (i == p->size)
    {
        printf("没有你查找的信息\n");
    }

}

//修改学生信息
void Change(Sys* p)
{
    int n, i, j = 0;
    printf("请输入要修改学生的记录序号:\n");
    scanf("%d", &n);
    for (i = 0; i < p->size; i++)
    {
        if (n == i)
        {
            j = i;
            break;
        }
    }
    if (i == j)
    {
        printf("输入学生信息:\n");
        printf("请输入学生的姓名:\n");
        scanf("%s", p->student[j].name);
        printf("请输入学生的学号:\n");
        scanf("%d", &p->student[j].number);
        printf("请输入学生的打卡的日期:\n");
        scanf("%f", &p->student[j].date);
        printf("请输入学生的打卡的第几节课:\n");
        scanf("%d", &p->student[j].num1);
        printf("请输入学生的打卡的课程名字:\n");
        scanf("%s", p->student[j].course);
        printf("请输入学生的打卡次数:\n");
        scanf("%d", &p->student[j].num2);
        printf("缺课类型(迟到、早退、请假、旷课):\n");
        printf("请输入学生的迟到次数:\n");
        scanf("%d", &p->student[j].absence.arr1);
        printf("请输入学生的早退次数:\n");
        scanf("%d", &p->student[j].absence.arr2);
        printf("请输入学生的请假次数:\n");
        scanf("%d", &p->student[j].absence.arr3);
        printf("请输入学生的旷课次数:\n");
        scanf("%d", &p->student[j].absence.arr4);
        printf("修改成功");
    }
    else
    {
        printf("没有要修改学生的信息\n");
    }
}

//删除学生信息
void Delete(Sys* p)
{
    int n, i;
    printf("输入要删除的学生的记录序号:\n");
    scanf("%d", &n);
    if (n >= p->size)
    {
        printf("没有要删除的学生\n");
        return;
    }
    else if(n >= 0)
    {
        for (i = n; i < p->size - 1; i++)
        {
            p->student[i] = p->student[i + 1];
        }
        p->size--;
        printf("删除成功\n");
    }
}

//统计学生考勤
void Statistics(Sys* p)
{
    int n, i;
    printf("请输入需要统计学生的学号:\n");
    scanf("%d", &n);
    int message = 0;
    int a1 = 0;
    int a2 = 0;
    int a3 = 0;
    int a4 = 0;
    for (i = 0; i < p->size; i++)
    {
        if (n == p->student[i].number)
        {
            message++;
            if (p->student[i].absence.arr1 == 1)
            {
                a1++;
            }
            if (p->student[i].absence.arr2 == 1)
            {
                a2++;
            }
            if (p->student[i].absence.arr3 == 1)
            {
                a3++;
            }
            if (p->student[i].absence.arr4 == 1)
            {
                a4++;
            }
        }
    }
    printf("该学生考勤信息%d条\n", message);
    printf("该学生迟到次数%d\t早退次数%d\t请假次数%d\t旷课次数%d\n", a1, a2, a3, a4);
}

//写入到文件中
void Savefile(Sys* p, char* filename)
{
    FILE* fp = fopen(filename, "a");
    for (int i = 0; i < p->size; i++)
        fprintf("%8d\t%s\t%d\t%4.2f\t%8d\t%s\t\t%d\t\t%1d\t%1d\t%1d\t%1d\n", i, p->student[i].name,
            p->student[i].number, p->student[i].date, p->student[i].num1, p->student[i].course,
            p->student[i].num2, p->student[i].absence.arr1, p->student[i].absence.arr2,
            p->student[i].absence.arr3, p->student[i].absence.arr4);
    printf("导入成功");
    fclose(fp);
}

//文件数据读出
void Readfile(Sys* p, char* filename)
{
    FILE* fp = fopen(filename, "r");
    int i = 0;
    while (fscanf(fp, "%s\t%d\t%4.2f\t%8d\t%s\t\t%d\t\t%1d\t%1d\t%1d\t%1d\n", p->student[i].name,
        &p->student[i].number, &p->student[i].date, &p->student[i].num1, p->student[i].course,
        &p->student[i].num2, &p->student[i].absence.arr1, &p->student[i].absence.arr2,
        &p->student[i].absence.arr3, &p->student[i].absence.arr4) != EOF)
    {
        i++;
    }
    fclose(fp);
}

//创建文件
void CreateFile(char* filename)
{
    FILE *fp = fopen(filename, "a");
    fclose(fp);
}


int main()
{
    int x = 50;
    Sys* s = createsystem(x);
    char Filename[15] = "message.txt";
    CreateFile(Filename);
    while (1)
    {
        mune();
        keydown(s, Filename);
        system("pause");
        system("cls");
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-30 22:11
    关注

    【相关推荐】



    • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7493111
    • 你也可以参考下这篇文章:中文转阿拉伯数字
    • 您还可以看一下 孙培超老师的阿里云服务器搭建多站点运行平台课程中的 阿里云服务器上创建第一个站点小节, 巩固相关知识点
    • 除此之外, 这篇博客: 算法分析课设(十一)博物馆守卫问题、世界名画陈列馆问题(分支界限法)中的 完整代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
      #include <stdio.h>
      #include <queue>
      
      // m*n的房间
      int m,n;
      // 自身和上下左右5个方位
      int position[5][2]={
      	{0, 0},
      	{0, 1},
      	{0,-1},
      	{1, 0},
      	{-1,0}
      };
      //最优结果 ans为机器人个数 ans_arr为每个机器人的位置
      int ans_arr[30][30],ans;
      
      struct Node{
          // 机器人位置 
      	int robot_position[30][30];
          // 被监视的房间位置
      	int room_watched[30][30]; 
          // (i,j)为当前遍历到的坐标
      	int i,j; 
          // 机器人数   被监视的房间个数
          int robotNum,roomNum;
      };
      
      // 优先队列的比较函数重写
      struct cmp 
      {
          bool operator() (Node a, Node b)
          {
          	// 比较哪个快照被监视房间多(小顶堆)
              return a.roomNum > b.roomNum; 
          }
      };
      
      //优先队列,cmp函数会自动执行
      priority_queue<Node, vector<Node>, cmp> q;
      
      Node init(Node node)
      {
      	// 初始化robot_position数组全为0
      	memset(node.robot_position,0,sizeof(node.robot_position)); 
      	// 初始化room_watched数组全为0
      	memset(node.room_watched,0,sizeof(node.room_watched)); 
      	// 当前点在i=1,j=1
      	node.i=1;node.j=1;
      	// 当前的机器人数;当前的监控房间数
      	node.robotNum=0;node.roomNum=0;
      
      	// 在博物馆的上下扩充两行
      	for(int i=0;i<=m+1;i++)
      		node.room_watched[i][0]=node.room_watched[i][m+1]=1;
      	// 在博物馆的左右扩充两列
      	for(int i=0;i<=n+1;i++)
      		node.room_watched[0][i]=node.room_watched[n+1][i]=1;
      	return node;
      }
      
      void setRobot(Node p,int x,int y)
      {
      	// 以下几行都是在复制一份快照p
      	Node node;
      	node=init(node);
      	node.i=p.i;
      	node.j=p.j;
      	node.roomNum=p.roomNum;
      	memcpy(node.robot_position, p.robot_position, sizeof(p.robot_position));
      	memcpy(node.room_watched, p.room_watched, sizeof(p.room_watched));
      
      	// 在(x,y)点新增机器人,机器人数量要+1
      	node.robot_position[x][y]=1;
      	node.robotNum=p.robotNum+1;
      
      	// 对这个新增机器人的上下左右和自身标记被监控
      	for(int d=0;d<5;d++)
          {
          	// pos_x,pos_y表示机器人上下左右位置,我们标记这些位置的房间被监控
              int pos_x=x+position[d][0];
              int pos_y=y+position[d][1];
              node.room_watched[pos_x][pos_y]++;
      
              // 标记一个房间,roomNum就加一。
              // 一定要等于1,因为有的房间会被重复监控,那就是2了
              if(node.room_watched[pos_x][pos_y]==1) 
      		{
      			node.roomNum++;
      		}
          }
      
          // 如果行数不越界 且 当前点被监控了
          while(node.i<=m && node.room_watched[node.i][node.j]) 
      	{
      		// 当前点的列右移一个单位
      		node.j++;
      		// 如果右移之后越界了,就换行
      		if(node.j>n)
      			node.i++,node.j=1; 
      	}
      
      	// 把当前快照存到优先队列里,会调用cmp排序,保证最顶端的是最优的快照
      	q.push(node);
      	return;
      }
      
      int main()
      {
      	// 输入行列
      	scanf("%d%d",&m,&n);
      	// 机器人最多的数量
      	ans=m*n/3+2;
      	// 初始化
      	Node node;
      	node=init(node);
      	// 快照放入队列
      	q.push(node);
      	// 如果队列不空
      	while(!q.empty())
          {
          	// 返回队列第一个
              Node p=q.top();
              // 队列把第一个弹走
              q.pop();
              
              // 如果房间没有全被监控,则分别在当前遍历点的下方、本身、右方放置机器人
              // 注意这三种情况是互不干扰的,它们会生成三种快照,判断出用机器人最少的一个
              if(p.roomNum < m*n)
      		{	
      			// 1、在下方放置
      			// 判断条件就是下方有位置可放,不能在最后一行)
      			if(p.i<m)
      				setRobot(p,p.i+1,p.j);
      
      			// 2、在本身放置。
      			// 第一个判断条件是在它已经没有下方和右方的点的情况下,只能选择自身
      			// 第二个判断条件是它的右边没有被监控
      			if((p.i==m && p.j==n) || p.room_watched[p.i][p.j+1]==0)
      				setRobot(p,p.i,p.j);
      
      			// 3、在右方放置
      			// 第一个判断条件是遍历点右边是没被监控的点
      			// 第二个判断条件是遍历点右边的右边是没有监控的点
      			if(p.j<n && (p.room_watched[p.i][p.j+1]==0 || p.room_watched[p.i][p.j+2]==0)) 
      				setRobot(p,p.i,p.j+1);
              }
              // 如果房间全被监控了
              else(p.roomNum>=m*n)
              {
              	// 如果已安置的机器人数是目前最少的,更新结果ans
              	if(p.robotNum<ans)
              	{
      	        	ans=p.robotNum;
      	        	// 把这种安置方法保存到结果数组ans_arr里面
      				memcpy(ans_arr, p.robot_position, sizeof(p.robot_position));
      	        }	
              }
              	
          }
      
          // 打印结果和结果数组
      	printf("%d\n",ans);
      	for(int i=1;i<=m;i++)
      	{
      		for(int j=1;j<=n;j++)
      			printf("%d ",ans_arr[i][j]);
              printf("\n");
      	}	
      }

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

报告相同问题?

问题事件

  • 创建了问题 12月30日

悬赏问题

  • ¥100 如何寻找到黑客帮助,愿意付丰厚的酬劳
  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败