问题描述
- 用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();
}
解决方案
应该是出现错误了,重新试试看?
解决方案二:
稍微改了几个地方,没有出现未输入完闪退
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();
}
解决方案三:
又改了两个地方:
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();
}
时间: 2024-09-01 23:16:37