Huang_Jason_ 2023-06-17 22:18 采纳率: 50%
浏览 40
已结题

怎么样获取学生数量呢,在我的getStuFromStruct()中

怎么样获取学生数量呢,在我的getStuFromStruct()中,会不会是我比较数组是否为空出问题有关系呢

#include <stdio.h>
#include <stdlib.h>
#define max 10
struct Student {
    char name[10];
    int yw;
    int sx;
    int yy;
} student[10],temp;//建立一个结构体数组,我这里设置的是里面最多存十个题目

void addStudent() {  //增加学生
    FILE* fp = fopen("student.txt", "a+");
    if(NULL == fp) { //确保成功打开文件,否则退出系统
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    printf("请输入要添加的学生名字:");
    scanf("%s", temp.name);
    fwrite(&(temp),  sizeof(struct Student),1, fp);
    fclose(fp);
    printf("信息添加成功!\n");
}

void research() { //查询某位学生成绩
    //查找
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    char name[10]; //这个数组用来接收用户输入的题目
    int count = 0;
    printf("请输入学生名字\n");
    scanf("%s", name);
    while(count <= num) {
        if(strcmp(student[count].name, name) == 0){  //字符串的比较用strcmp();
            printf("名字:%s \n  语文:%d  数学:%d  英语:%d  \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
            break;
        }
        else {
            count++;
        }

    }
    if(count > num) {
        printf("未找到该学生!\n");
    }
}

void lookthroughAll() { //查看全部
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    int count = 0;
    while(count <= num) {
        printf("名字:%s  --语文:%d  数学:%d  英语:%d  \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
        count++;
    }
}

void reviseInformation(){  //登记成绩
    FILE *fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num],  sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    char name[10]; //接收输入的名字
    int count = 0;
    printf("请输入要登记成绩的学生名字:\n");
    scanf("%s", name);
    while(count <= num) {
        if(strcmp(student[count].name ,name) == 0){  //字符串的比较用strcmp();
            printf("请输入成绩(xx xx xx):");
            int yw,sx,yy;
            scanf("%d", &yw);
            scanf("%d", &sx);
            scanf("%d", &yy);
            student[count].yw = yw;
            student[count].sx = sx;
            student[count].yy = yy;
            printf("登记成功!\n");
            printf(":%d :%d :%d ",student[count].yw,student[count].sx,student[count].yy);
            break;
        }
        count++;
    }
    if(count > num) {
        printf("未找到该学生!\n");
    }
    fp = fopen("student.txt", "w");
    //写入数据
    count = 0;
    while(count <= num) {
        fwrite(&student[count],  sizeof(struct Student),1, fp);
        count++;
    }
    fclose(fp);
}

void deleteCourse() { //删除学生
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student), 1, fp);
    while(r) {
        num++;
        r = fread(&student[num],  sizeof(struct Student),1, fp);
    }
    fclose(fp);
    char name[10];
    int count=0;
    printf("请输入想要删除的学生:");
    scanf("%s", &name);
    while(count <= num) {
        if(strcmp(student[count].name, name) == 0) { //字符串的比较用strcmp();
            for(; count < num; count++) {
                strcpy(student[count].name, student[count + 1].name );
                student[count].yw = student[count + 1].yw;
                student[count].sx = student[count + 1].sx;
                student[count].yy = student[count + 1].yy;
            }
            printf("删除成功!\n");
            break;
        } else {
            count++;
        }
    }
    if(count > num) {
        printf("未找到该学生信息!\n");
    }
    fp = fopen("student.txt", "w");
    //写入数据
    count = 0;
    getStuFromStruct();
    while(count < (getStuFromStruct()-1) ) {
        fwrite(&student[count],   sizeof(struct Student),1, fp);
        count++;
    }
    fclose(fp);
}

int getStuFromStruct(){  //获取学生个数
    int i,j=0;
    char f[10];
    for(;i<max;i++){
        if ( strcmp(student[i].name, f)==0) {
            printf("%d无学生  ",i);
        }else{
            j++;
        }
    }
    printf("\n学生数为:%d\n",j);
    return j;
}

int main()
{
    int i;
    while(1){
        printf(" 请输入模式:");
        scanf("%d",&i);
        switch (i){
            case 1:
                addStudent();   //添加 一个学生姓名
                break;
            case 2:
                research(); //查询某位学生成绩
                break;
            case 3:
                lookthroughAll();//查看全部学生内容
                break;
            case 4:
                reviseInformation();////给学生添加成绩
                break;
            case 5:
                deleteCourse(); //删除某个学生
                break;
            case 6:
                getStuFromStruct();//获取学生个数

        }

    }
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-06-17 23:10
    关注

    int getStuFromStruct() 函数里,变量 i 没被初始化。

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

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 修改了问题 6月17日
  • 创建了问题 6月17日

悬赏问题

  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥20 看图片)删除这个自动化录屏脚本就一直报错找不到脚本文件,如何解决?(相关搜索:bat文件)
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件