关于#C语言#的问题,如何解决?

为什么在测试过程中使用菜单1.,2,3都是直接关闭程序?求帮忙修改!

#include <stdio.h>
#define N 3 // 学生数量
#define M 3 // 课程数量

// 学生结构体
struct student {
    char name[20]; // 姓名
    int id; // 学号
    int score[M]; // 成绩
    float avg_score; // 平均成绩
};

// 计算每个学生的平均成绩
void calc_avg_score(struct student *s) {
    int i;
    float sum = 0;
    for (i = 0; i < M; i++) {
        sum += s->score[i];
    }
    s->avg_score = sum / M;
}

// 计算每门课的平均成绩、最高分、最低分
void calc_course_stat(struct student s[], float course_avg[], int course_max[], int course_min[]) {
    int i, j;
    for (i = 0; i < M; i++) {
        float sum = 0;
        int max = 0, min = 100;
        for (j = 0; j < N; j++) {
            sum += s[j].score[i];
            if (s[j].score[i] > max) {
                max = s[j].score[i];
            }
            if (s[j].score[i] < min) {
                min = s[j].score[i];
            }
        }
        course_avg[i] = sum / N;
        course_max[i] = max;
        course_min[i] = min;
    }
}

int main() {
    int choice;
    struct student stu[N];
    float course_avg[M];
    int course_max[M], course_min[M];
    int i, j;

    // 输入每个学生的信息
    for (i = 0; i < N; i++) {
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", stu[i].name);
        printf("请输入第%d个学生的学号:", i + 1);
        scanf("%d", &stu[i].id);
        for (j = 0; j < M; j++) {
            printf("请输入第%d个学生的%s成绩:", i + 1, j == 0 ? "语文" : (j == 1 ? "数学" : "英语"));
            scanf("%d", &stu[i].score[j]);
        }
        calc_avg_score(&stu[i]);
    }

    // 计算每门课的平均成绩、最高分、最低分
    calc_course_stat(stu, course_avg, course_max, course_min);

    // 显示菜单
    printf("\n");
    printf("********** 菜单 **********\n");
    printf("1. 显示每个学生的姓名、学号及三科成绩\n");
    printf("2. 显示每个学生的平均成绩\n");
    printf("3. 显示每门课的平均成绩、最高分、最低分\n");
    printf("4. 退出\n");
    printf("***************************\n");
    printf("请输入选项(1-4):");
    scanf("%d", &choice);

    // 根据用户选择执行相应操作
    switch (choice) {
        case 1:
            // 显示每个学生的姓名、学号及三科成绩
            printf("\n");
            printf("姓名\t学号\t语文\t数学\t英语\n");
            for (i = 0; i < N; i++) {
                printf("%s\t%d\t", stu[i].name, stu[i].id);
                for (j = 0; j < M; j++) {
                    printf("%d\t", stu[i].score[j]);
                }
                printf("\n");
            }
            break;
        case 2:
            // 显示每个学生的平均成绩
            printf("\n");
            printf("姓名\t学号\t平均成绩\n");
            for (i = 0; i < N; i++) {
                printf("%s\t%d\t%.2f\n", stu[i].name, stu[i].id, stu[i].avg_score);
            }
            break;
        case 3:
            // 显示每门课的平均成绩、最高分、最低分
            printf("\n");
            printf("课程\t平均成绩\t最高分\t最低分\n");
            for (i = 0; i < M; i++) {
                printf("%s\t%.2f\t%d\t%d\n", i == 0 ? "语文" : (i == 1 ? "数学" : "英语"), course_avg[i], course_max[i], course_min[i]);
            }
            break;
        case 4:
            // 退出
            return 0;
        default:
            printf("无效选项!\n");
    }

    return 0;
}


打印的界面看看

外面整体加个循环 while(true)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7674067
  • 这篇博客你也可以参考下:编写一个c程序,输入3个值,输出其中最大值。(输入值如果不以逗号分隔为什么会出错?)
  • 除此之外, 这篇博客: C语言实现顺序查找中的 算法思想:遍历整个数组,依次将数组中的每一个元素与待查找的数据进行比较,若没找到,则停止循环,输出其位置值;如果遍历结束,都没有找到符合条件的数,则输出“没找到”等提示信息。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    核心从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败

                1.从表中的第一个元素开始,依次与关键字比较。

                2.若某个元素匹配关键字,则 查找成功。

                3.若查找到最后一个元素还未匹配关键字,则 查找失败。

     

    顺序查找对表中元素的排序无要求,这些元素在表中可以任意排序,这使得顺序查找的适应性很高。顺序查找的实现很简单,其示例代码如下:

    #include "stdio.h"
    void main(){
    	int a[10],num,i,flag;                 /*变量定义*/
    	printf("Please input numbers: ");
    	for(i=0;i<=9;i++){
    		scanf("%d",&a[i]);                 /*接收输入的数组*/
    	}
    	printf("Please finding numbers: ");
    	scanf("%d", &num);                   /*接收关键字*/
    	for(i=0;i<=9;i++){
    		if(a[i]=num){                      //查找到所需的元素,跳出循环
    			flag=1;
    			break;
    		}
    	}
    	if(i==10){
    		flag=0;
    	}
    	if(flag){
    		printf("The numbers find!\n");
    	}
    	else{
    		printf("The numbers No find!\n");
    	}
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载

  • 您还可以看一下 张勇老师的初级到CS开发高手通用权限管理系统全程实录课程中的 编写递归算法绑定树型菜单小节, 巩固相关知识点

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