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

为什么程序运行时会出现这个,怎么解决阿

为什么程序运行时会出现这个,不理解,怎么解决阿

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, const char* filename);                    //储存信息功能
void Readfile(Sys* p, const 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, const 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, const char* filename)
{
    FILE* fp = fopen(filename, "r");
    int i = 0;
    while (fscanf(fp, "%s\t%d\t%f\t%d\t%s\t\t%d\t\t%d\t%d\t%d\t%d\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(const char* filename)
{
    FILE *fp = fopen(filename, "a");
    fclose(fp);
}


int main()
{
    Sys* s = createsystem(50);
    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:10
    关注

    【以下回答由 GPT 生成】

    对您的 C 语言代码进行检查后,我发现了以下问题以及解决方案:

    问题 1:在 Inputstudentdata 函数中,您没有返回值的定义。

    解决方案:请为该函数添加返回值的定义,并在函数内部进行相应的处理。

    Stu Inputstudentdata(char* name, int number, float date, int num1, char* course, int num2, int arr1, int arr2, int arr3, int arr4) {
        Stu student;
        strcpy(student.name, name);
        student.number = number;
        student.date = date;
        student.num1 = num1;
        strcpy(student.course, course);
        student.num2 = num2;
        student.absence.arr1 = arr1;
        student.absence.arr2 = arr2;
        student.absence.arr3 = arr3;
        student.absence.arr4 = arr4;
        return student;
    }
    

    问题 2:keydown 函数的参数类型为 Sys*char*,但未进行定义或使用。

    解决方案:请在函数内部进行相应的参数类型定义和使用。

    void keydown(Sys *p, char* filename) {
        // 根据 p 和 filename 进行相应处理
    }
    

    问题 3:Inputsystem 函数在参数列表中添加了无效的声明 Stu data

    解决方案:请移除无效的声明,或者将声明改为有效的参数列表。

    在对上述问题进行修复后,请再次编译和运行您的代码,如仍出现错误,请提供具体的错误信息,以便更准确地帮助您解决问题。



    【相关推荐】



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

报告相同问题?

问题事件

  • 创建了问题 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本地登录失败