2 sinat 34316634 sinat_34316634 于 2016.03.16 19:57 提问

用C语言编写学生信息录入系统,没有输入完毕直接跳出是什么原因

#include /*标准输入/输出函数库*/
#include /*标准函数库*/
#include /*字符串函数库*/
//学生信息数据类型定义
typedef struct student
{
char name[20]; /*姓名*/
int num[10]; /*学号*/
char sex[10]; /*性别*/
float chinese[10]; /*语文成绩*/
float math[10]; /*数学成绩*/
float english[10]; /*英语成绩*/
float computer[10]; /*计算机成绩*/
struct student next;
}stu;
//主要处理函数定义;
stu *head=NULL;
stu *plaststu=NULL;
void print_menu_main();
void input_record() /
成绩录入子函数*/
{char a;
do
{
stu pnewstu=(stu)malloc(sizeof(stu));
system("cls");
printf(">请输入学生姓名(注:最大长度为十个字符):\n");
printf("姓名:");
scanf("%s",pnewstu->name);
printf("学号:");
scanf("%d",pnewstu->num);
printf("性别:");
scanf("%s",pnewstu->sex);
printf("语文成绩:");
scanf("%3.0f",pnewstu->chinese);
printf("数学成绩:");
scanf("%3.0f",pnewstu->math);
printf("英语成绩:");
scanf("%3.0f",pnewstu->english);
printf("计算机成绩:");
scanf("%3.0f",pnewstu->computer);
if(head==NULL)
{
plaststu=pnewstu;
head=pnewstu;
}
else
{
pnewstu->next=pnewstu;
plaststu=pnewstu;
}
printf("继续输入吗?");
scanf("%c",&a);
}
while(a=='Y');
print_menu_main();
}
void show_record() {
int key_b_in;
printf("欢迎进入成绩显示功能:");
scanf("%d",&key_b_in);
if(key_b_in==2) {system("cls");
print_menu_main();
} } /*成绩显示子函数*/
void search_record() {
int key_b_in;
printf("请问你要查询哪些信息呢:");
scanf("%d",&key_b_in);
if(key_b_in==3) {system("cls");
print_menu_main();
} } /*成绩查询子函数*/
void update_record() {
int key_b_in;
printf("请问你要更新哪些信息呢:");
scanf("%d",&key_b_in);
if(key_b_in==4) {system("cls");
print_menu_main();
} } /*成绩更新子函数*/
void delete_record() {
int key_b_in;
printf("请问你要删除哪些信息呢:");
scanf("%d",&key_b_in);
if(key_b_in==5) {system("cls");
print_menu_main();
} } /*成绩删除子函数*/
void calculate_record() {
int key_b_in;
printf("请问你要如何计算成绩呢:");
scanf("%d",&key_b_in);
if(key_b_in==6) {system("cls");
print_menu_main();
} } /*成绩计算子函数*/
void save_record() {
int key_b_in;
printf("请问你要保存哪些信息呢:");
scanf("%d",&key_b_in);
if(key_b_in==7) {system("cls");
print_menu_main();
} } /*成绩保存子函数*/
void exit_system () { exit(0);} /*退出系统子函数*/
//显示主菜单界面函数定义
void print_menu_main()
{
int key_b_in;
printf("======================================================================\n");
printf("|学生成绩管理系统\n");
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("|\n");
printf("======================================================================\n");
printf(">请选择:");
scanf("%d",&key_b_in);
switch(key_b_in)
{
case 1:input_record();break;
case 2:show_record();break;
case 3:search_record();break;
case 4:update_record();break;
case 5:delete_record();break;
case 6:calculate_record();break;
case 7:save_record();break;
case 8:exit_system();break;
default:printf("输入错误,请重输入!(注意:输入有效范围为1-8)\n");
}

}
//主函数
main()
{
print_menu_main();
}

3个回答

cp887563
cp887563   2016.03.16 20:20

应该是出现错误了,重新试试看?

qq423399099
qq423399099   Ds   Rxr 2016.03.16 20:23

稍微改了几个地方,没有出现未输入完闪退
1.struct student next;改成了struct student next;
2.stu pnewstu=(stu)malloc(sizeof(stu));改成了stu *pnewstu=(stu
)malloc(sizeof(stu));

#include<stdio.h>
using namespace std;

typedef struct student
{
    char name[20]; /*姓名*/
    int num[10]; /*学号*/
    char sex[10]; /*性别*/
    float chinese[10]; /*语文成绩*/
    float math[10]; /*数学成绩*/
    float english[10]; /*英语成绩*/
    float computer[10]; /*计算机成绩*/
    struct student *next;
}stu;
//主要处理函数定义;
stu *head=NULL;
stu *plaststu=NULL;
void print_menu_main();
void input_record() /*成绩录入子函数*/
{char a;
do
{
    stu *pnewstu=(stu*)malloc(sizeof(stu));
    system("cls");
    printf(">请输入学生姓名(注:最大长度为十个字符):\n");
    printf("姓名:");
    scanf("%s",pnewstu->name);
    printf("学号:");
    scanf("%d",pnewstu->num);
    printf("性别:");
    scanf("%s",pnewstu->sex);
    printf("语文成绩:");
    scanf("%3.0f",pnewstu->chinese);
    printf("数学成绩:");
    scanf("%3.0f",pnewstu->math);
    printf("英语成绩:");
    scanf("%3.0f",pnewstu->english);
    printf("计算机成绩:");
    scanf("%3.0f",pnewstu->computer);
    if(head==NULL)
    {
        plaststu=pnewstu;
        head=pnewstu;
    }
    else
    {
        pnewstu->next=pnewstu;
        plaststu=pnewstu;
    }
    printf("继续输入吗?");
    scanf("%c",&a);
}
while(a=='Y');
print_menu_main();
}
void show_record() {
    int key_b_in;
    printf("欢迎进入成绩显示功能:");
    scanf("%d",&key_b_in);
    if(key_b_in==2) {system("cls");
    print_menu_main();
    } } /*成绩显示子函数*/
void search_record() {
    int key_b_in;
    printf("请问你要查询哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==3) {system("cls");
    print_menu_main();
    } } /*成绩查询子函数*/
void update_record() {
    int key_b_in;
    printf("请问你要更新哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==4) {system("cls");
    print_menu_main();
    } } /*成绩更新子函数*/
void delete_record() {
    int key_b_in;
    printf("请问你要删除哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==5) {system("cls");
    print_menu_main();
    } } /*成绩删除子函数*/
void calculate_record() {
    int key_b_in;
    printf("请问你要如何计算成绩呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==6) {system("cls");
    print_menu_main();
    } } /*成绩计算子函数*/
void save_record() {
    int key_b_in;
    printf("请问你要保存哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==7) {system("cls");
    print_menu_main();
    } } /*成绩保存子函数*/
void exit_system () { exit(0);} /*退出系统子函数*/
//显示主菜单界面函数定义
void print_menu_main()
{
    int key_b_in;
    printf("======================================================================\n");
    printf("|学生成绩管理系统\n");
    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("|\n");
    printf("======================================================================\n");
    printf(">请选择:");
    scanf("%d",&key_b_in);
    switch(key_b_in)
    {
    case 1:input_record();break;
    case 2:show_record();break;
    case 3:search_record();break;
    case 4:update_record();break;
    case 5:delete_record();break;
    case 6:calculate_record();break;
    case 7:save_record();break;
    case 8:exit_system();break;
    default:printf("输入错误,请重输入!(注意:输入有效范围为1-8)\n");
    }
}
//主函数
int main()
{
    print_menu_main();
}

结果:
图片说明

sinat_34316634
sinat_34316634 还有这样的话只能输到语文成绩就停止了,数学成绩和后面没法输入啊,想知道是为什么?
一年多之前 回复
qq423399099
qq423399099 1.struct student next;改成了struct student *next;
一年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.03.17 08:51

又改了两个地方:
1.结构体改了一下,成绩和学号没必要用数组
2.scanf没有格式化输入scanf("%3.0f",XXXXXX);

 #include<stdio.h>
using namespace std;
typedef struct student
{
    char name[20]; /*姓名*/
    int num; /*学号*/
    char sex[10]; /*性别*/
    float chinese; /*语文成绩*/
    float math; /*数学成绩*/
    float english; /*英语成绩*/
    float computer; /*计算机成绩*/
    struct student *next;
}stu;
//主要处理函数定义;
stu *head=NULL;
stu *plaststu=NULL;
void print_menu_main();
void input_record() /*成绩录入子函数*/
{char a;
do
{
    stu *pnewstu=(stu*)malloc(sizeof(stu));
    system("cls");
    printf(">请输入学生姓名(注:最大长度为十个字符):\n");
    printf("姓名:");
    scanf("%s",pnewstu->name);
    printf("学号:");
    scanf("%d",&pnewstu->num);
    printf("性别:");
    scanf("%s",pnewstu->sex);
    printf("语文成绩:");
    scanf("%f",&pnewstu->chinese);
    printf("数学成绩:");
    scanf("%f",&pnewstu->math);
    printf("英语成绩:");
    scanf("%f",&pnewstu->english);
    printf("计算机成绩:");
    scanf("%f",&pnewstu->computer);
    if(head==NULL)
    {
        plaststu=pnewstu;
        head=pnewstu;
    }
    else
    {
        pnewstu->next=pnewstu;
        plaststu=pnewstu;
    }
    printf("继续输入吗?");
    scanf("%c",&a);
}
while(a=='Y');
print_menu_main();
}
void show_record() {
    int key_b_in;
    printf("欢迎进入成绩显示功能:");
    scanf("%d",&key_b_in);
    if(key_b_in==2) {system("cls");
    print_menu_main();
    } } /*成绩显示子函数*/
void search_record() {
    int key_b_in;
    printf("请问你要查询哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==3) {system("cls");
    print_menu_main();
    } } /*成绩查询子函数*/
void update_record() {
    int key_b_in;
    printf("请问你要更新哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==4) {system("cls");
    print_menu_main();
    } } /*成绩更新子函数*/
void delete_record() {
    int key_b_in;
    printf("请问你要删除哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==5) {system("cls");
    print_menu_main();
    } } /*成绩删除子函数*/
void calculate_record() {
    int key_b_in;
    printf("请问你要如何计算成绩呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==6) {system("cls");
    print_menu_main();
    } } /*成绩计算子函数*/
void save_record() {
    int key_b_in;
    printf("请问你要保存哪些信息呢:");
    scanf("%d",&key_b_in);
    if(key_b_in==7) {system("cls");
    print_menu_main();
    } } /*成绩保存子函数*/
void exit_system () { exit(0);} /*退出系统子函数*/
//显示主菜单界面函数定义
void print_menu_main()
{
    int key_b_in;
    printf("======================================================================\n");
    printf("|学生成绩管理系统\n");
    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("|\n");
    printf("======================================================================\n");
    printf(">请选择:");
    scanf("%d",&key_b_in);
    switch(key_b_in)
    {
    case 1:input_record();break;
    case 2:show_record();break;
    case 3:search_record();break;
    case 4:update_record();break;
    case 5:delete_record();break;
    case 6:calculate_record();break;
    case 7:save_record();break;
    case 8:exit_system();break;
    default:printf("输入错误,请重输入!(注意:输入有效范围为1-8)\n");
    }
}
//主函数
int main()
{
    print_menu_main();
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!