标题:求助一个C语言程序停止运行问题
只看楼主
TRH
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-12-23
结帖率:100%
已结贴  问题点数:20 回复次数:6 
求助一个C语言程序停止运行问题
C语言新手,写了一个超级简单的学生成绩管理系统,编译链接都没问题,可是程序运行会突然停止运行,如图:

用VS2017调试了一下,如图:

百思不得其解,因此向各位大佬请教一下,看看代码有什么问题。
源代码如下:

程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student
{
    char num[20];         //学号
    char name[20];        //姓名
    char subject[20];     //科目
    float grade;          //分数
}
stu[3];
void menu()
{
    printf("            ======================================================\n");
    printf("            ||             模拟简单学生成绩管理系统             ||\n");
    printf("            ||                 ╭──────╮                 ||\n");
    printf("            ||                 │★功能菜单★┃                 ||\n");
    printf("            ||                 ╰━━━━━━╯                 ||\n");
    printf("            ||                  1 输入学生成绩                  ||\n");
    printf("            ||                  2 输出学生成绩                  ||\n");
    printf("            ||                  3 查询学生成绩                  ||\n");
    printf("            ||                  4 输出平均成绩                  ||\n");
    printf("            ||                  0 退出管理系统                  ||\n");
    printf("            ======================================================\n");
}
void input()
{
    printf("\t\t请按顺序输入三个学生姓名,学号,学科,成绩:\n");
    printf("\n");
    for (int i = 0; i<3; i++)
        scanf("%s%s%s%f", stu[i].name, stu[i].num, stu[i].subject, stu[i].grade);
    printf("\n");
}
void show()
{
    printf("\n");
    printf("姓名\t\t学号\t\t科目\t\t成绩\n");
    for (int i = 0; i<3; i++)
        printf("%s\t\t%s\t\t%s\t\t%f\n", stu[i].name, stu[i].num, stu[i].subject, stu[i].grade);
    printf("\n");
}
void search()
{
    char num[20];
    printf("\t\t请输入要查询的学号:");
    scanf("%s", num);
    for (int i = 0; i<3; i++)
    {
        if (0 == strcmp(num, stu[i].num))
        {
            printf("\n");
            printf("姓名\t\t学号\t\t科目\t\t成绩\n");
            printf("%s\t\t%s\t\t%s\t\t%f\n", stu[i].name, stu[i].num, stu[i].subject, stu[i].grade);
            printf("\n");
        }
    }
}
void average()
{
    float sum=0;
    int i;
    for(i=0;i<3;i++)
    {
        sum+=stu[i].grade;
    }
    printf("平均成绩=%d\n",sum/3);
}
int main()
{
    int selection;
    while (1)
    {
        menu();
        printf("\t\t请选择0--4:");
        scanf("%d", &selection);
        switch (selection)
        {
        case 1:system("cls");input();  break;
        case 2:system("cls");show();   break;
        case 3:system("cls");search(); break;
        case 4:system("cls");average(); break;
        case 0:system("cls");exit(0);  break;
        default: printf("\t\t输入有误,请重新输入!\n");
        }
    }
    return 0;
}
搜索更多相关主题的帖子: 成绩 stu num printf || 
2017-12-27 16:58
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:7 
scanf("%s%s%s%f", stu[i].name, stu[i].num, stu[i].subject, &stu[i].grade);
2017-12-27 17:23
TRH
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-12-23
得分:0 
回复 楼主 TRH
谢谢大佬,问题解决了,但是大佬能说说这是为什么吗?
2017-12-27 17:30
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:7 
你定义的
float grade;
这是一个变量,scanf时需要用&获取地址,数组不用
2017-12-27 22:07
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:3 
回复 3楼 TRH
数组名代表数组的首地址
2017-12-27 23:01
李伟康
Rank: 2
等 级:论坛游民
帖 子:9
专家分:14
注 册:2017-3-21
得分:3 
内存溢出
2017-12-29 13:47
TRH
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2017-12-23
得分:0 
回复 4楼
明白了,谢谢大佬
2018-01-03 22:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483761-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.512345 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved