m0_73842959 2022-12-12 19:02 采纳率: 100%
浏览 110
已结题

c语言 为什么有printf却没输出啊

#include <stdio.h>
#include "string.h"
#include "stdlib.h"
#include <math.h>
int b=0;
typedef struct student{
    char num[20]; //学号
    char name[20]; //姓名
    char clas[20]; //班级
    int scores[3]; //该生在三门课程中所获得的积分
    int levels[3]; //三门课程的等级,与scores一一对应
}STUDENT;
typedef struct course{
    int num; //课程编号
    char name[20]; //课程名称
    int item[1000]; //完成相应试题所获取的分值,假设每门课程最多包括1000道试题
}COURSE;
typedef struct problem{
    char name[20];
    int num[3];
}PROBLEM; 
void addstudent_information(STUDENT *P);//录入学生信息 
void addclass(COURSE *q);//录入课程 
void addproblem(PROBLEM *t);//录入试题 
void addscore (STUDENT *p,PROBLEM *t);//更新积分 
void student_grade(STUDENT *p);//计算学生等级
void searchfor(STUDENT *p);//查找
void student_sort(STUDENT *p);//排序 
void student_print(STUDENT *p);//输出
void student_delect(PROBLEM *t);// 删除某门课程的某个试题
void student_save(STUDENT *p,COURSE *q,PROBLEM *t);//保存功能
void student_import(STUDENT *p,COURSE *q,PROBLEM *t);//导入功能
int main()
{
    STUDENT stu[1000];
    COURSE cour[1000];
    PROBLEM pro[1000];
    printf("============\n");
    printf("欢迎进入学生信息管理系统\n");
    printf("1.新增学生信息\n");
    printf("2.新增课程\n");
    printf("3.新增试题\n");
    printf("4.更新积分\n");
    printf("5.计算学生等级\n");
    printf("6.查找功能\n");
    printf("7.排序功能\n");
    printf("8.输出功能\n");
    printf("9.删除某门课程的某个试题\n");
    printf("10.保存功能\n");
    printf("11.导入功能\n");
    printf("============\n");
    printf("请选择菜单项\n");//目录 
    int select;
    int i;
    printf("请输入'1-11'完成功能\n");
    scanf("%d",&select); 
    if(select>0 && select<12)
 {
    
    switch(select)
    {
        case 1:addstudent_information(stu);break;       
        case 2:addclass(cour);break;
        case 3:addproblem(pro);break;
        case 4:addscore(stu,pro);break;
        case 5:student_grade(stu);break;
        case 6:searchfor(stu);break;
        case 7:student_sort(stu);break;
        case 8:student_print(stu);break;
        case 9:student_delect(pro);break;
        case 10:student_save(stu,cour,pro);break;
        case 11:student_import(stu,cour,pro);break;
        case 0:return 0;
    }
 }
 else
 {
     printf("输入错误\n");
 }
}//主函数 
void addstudent_information(STUDENT *p)
{
    int b=0;
    int n,i=1;;
    printf("输入要录入的学生个数:\n");
    scanf("%d",&n);
    while(n>0)
    {
        printf("请输入第%d个学生学号:\n",i);
        scanf("%s",p[b].num);
        printf("请输入第%d个学生姓名:\n",i);
        scanf("%s",p[b].name);
        printf("请输入第%d个学生班级:\n",i);
        scanf("%d",p[b].clas);
        
        b++;
        n--;
        i++;
    }
}
void addclass(COURSE *q)//录入课程 
{
    
    int n,i=0,b=0,a;
    printf("请输入新增课程数量\n");
    scanf("%d",&n);
    for(a=1;i<n;i++,b++)
    {
        printf("请输入第%d个课程名称\n",a);
        scanf("%s",q[b].name);
        printf("请输入第%d个课程编号\n",a);
        scanf("%d",q[b].num);
    }
}    
void addproblem(PROBLEM *t)//录入试题 
{
    int b,i=0;
    printf("请输入录入试题数量\n");
    scanf("%d",&b); 
    for(i=0;i<b;i++)
    {
      printf("请输入要录入的试题\n");
      scanf("%s",t[i].name);
      printf("请输入相应分值\n");
      scanf("%d",t[i].num); 
    }
 
}
void addscore(STUDENT *p,PROBLEM *t)//更新积分 
{
    
    int b=0,s;
    for(b=0;b<10;b++)
    {
    printf("是否完成%s课程,'y'或'n'\n",t[b].name);
    scanf("%d",&s);
    if(s='y')
    {
        p[b].scores[3]=t[b].num[20]+p[b].scores[3];
    } 
    else
    {
        p[b].scores[3]=p[b].scores[3];
    }
    }
}
void student_grade (STUDENT *p)//计算学生等级
{
    int b,i;
    printf("请输入学生数量\n");
    scanf("%d",&b);
    for(i=0;i<b;i++)
    {
     p[i].levels[3]=log10(p[i].scores[3]+1);
    }
}
void searchfor(STUDENT *p)//查找
{
    char str[13];
    int i,b=0;
    printf("请输入要查找学生的学号\n");
    scanf("%s",&str);
    for(i=0;i<20;i++)
    {
        if(strcmp(str,p[i].num)==0)
        {
            break;
        }
    }
    if(i==b)
    {
        printf("查无此人\n");
    }
    else
    {
        printf("该学生积分为:%d,等级为:%d\n",p[i].scores,p[i].levels);
    }
}
void student_sort(STUDENT *p)//排序 
{
    int i,j,b,t;
    printf("请输入学生数量:\n");
    scanf("%d",&b);
    for(i=0;i<b-1;i++)
    {
        for(j=0;j<b-i-1;j++)
        {
            if(p[i].scores>p[i+1].scores)
            {
                t=p[i].scores[3];
                p[i].scores[3]=p[i+1].scores[3];
                p[i+1].scores[3]=t;
            }
        }
    }
}
void student_print(STUDENT *p)//输出
{
    int b,i;
    printf("请输入学生数量\n");
    scanf("%d",&b);
    for(i=0;i<b;i++)
    {
        printf("学号:%s",p[i].num);
        printf("姓名:%s",p[i].name);
        printf("班级:%d",p[i].clas);
        printf("积分:%d",p[i].scores);
        printf("等级:%d",p[i].levels);
    }
    
}
void student_delect(PROBLEM *t)// 删除某门课程的某个试题
{
    char pro[20];
    int i,j;
    for(i=0;i<b;i++)
    {
        if(strcmp(pro,t[i].name)==0)
        {
            break;
        }
    }
    if(i==b)
    {
        printf("无此题目\n");
    }
    else
    {
        for(j=i;j<b-1;j++)
        {
            t[j]=t[j+1];
        }
        b--;
        printf("删除成功\n");
    }
}
void student_save(STUDENT *p,COURSE *q,PROBLEM *t)//保存功能
{
    FILE *fp;
    int i;
    if((fp=fopen("d:\\students.dat","r"))==NULL)
    {
        printf("打开文件失败\n");
        exit(0);
    }
    for(i=0;fread(&p[i],sizeof(STUDENT),1,fp)!=0;i++);
    fclose(fp);
}
void student_import(STUDENT *p,COURSE *q,PROBLEM *t)//导入功能    
{
    int b=0;
    FILE *fp;
    if((fp=fopen("d:\\students.dat","w"))==NULL)
    {
        printf("打开文件失败\n");
        exit(0);
    }
    fwrite(p,b*sizeof(p[0]),1,fp);
    fclose(fp);
}




```指点。
  • 写回答

6条回答 默认 最新

  • X-道至简 2022-12-12 19:46
    关注

    你这个代码栈溢出了,这些数组结构体里面的空间分配太大

        STUDENT stu[1000];
        COURSE cour[1000];
        PROBLEM pro[1000];
    

    student 1000 *8 0 空间
    course 至少要分配 1000 * 1000 空间
    可以先改小一点试试,比如 cour[2]
    如果要这么大 要用 malloc进行堆分配


    还有头文件最好改下
    #include "string.h" 改成 #include <string.h>
    #include "stdlib.h" 改成 #include <stdlib.h>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 赞助了问题酬金15元 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'
  • ¥15 r语言神经网络自变量重要性分析