当我的输出函数代码为
int InputData()
{
int i=0;
int err=1;
int flag=1;
char ch;
while(flag)
{
printf("input the %dth student\n",i+1);
printf("Please input student ID:");
scanf("%d",&stu[i].ID);
printf("Input Student Name:");
scanf("%s",&stu[i].Name);
printf("Input Student Sex:");
scanf("%s",&stu[i].Sex);
err=0;
while(err==0)
{
printf("Please input English Score:\n");
scanf("%d",&stu[i].English_Score);
if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input Math Score:\n");
scanf("%d",&stu[i].Math_Score);
if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input C Score:\n");
scanf("%d",&stu[i].C_Score);
if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;
while(1)
{
printf("continue input(1 or 2)?\n");
printf("1-继续输入成绩\n");
printf("2-停止输入成绩\n");
scanf("%c",&ch);
switch(ch)
{
case 1:
i++;
InputData();
break;
case 2:
printf("即将返回主菜单...");
menu();break;
default:
printf("请在1-2中选择!");
}
return i;
}
}
}
这样时,无法进行继续输出和终止输出任务,直接显示菜单。
曾按照书上的方法打,输出代码如下
int InputData()
{
int i=0;
int err=1;
int flag=1;
char ch;
while(flag)
{
printf("input the %dth student\n",i+1);
printf("Please input student ID:");
scanf("%d",&stu[i].ID);
printf("Input Student Name:");
scanf("%s",&stu[i].Name);
printf("Input Student Sex:");
scanf("%s",&stu[i].Sex);
err=0;
while(err==0)
{
printf("Please input English Score:\n");
scanf("%d",&stu[i].English_Score);
if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input Math Score:\n");
scanf("%d",&stu[i].Math_Score);
if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input C Score:\n");
scanf("%d",&stu[i].C_Score);
if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;
printf("continue input(Y or N)?");
getchar();
scanf("%c",&ch);
if(ch=='Y'||'y')
flag=1;
else
flag=0;
i++;
}
return 1;
}
运行结果是会继续输入成绩,返回不了菜单或终止程序。
我想达到的效果,当我输入1时继续输入,但我输入2时终止输入返回菜单。
我的程序完全代码
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1000
int n,m,i,j,k=1;
struct student
{
int ID;
char Name;
char Sex;
int English_Score;
int Math_Score;
int C_Score;
int Total;
}stu[N];
int InputData();
int SaveData();
int ReadData();
int Browe();
int Select();
int Insert();
int Delect();
int Modify();
int SortTotal();
int menu();
int help();
int main()
{
while(k)
{
menu();
}
system("pause");
return 0;
}
int menu()
{
int num;
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("*********9 修改成绩********\n");
printf("******10 排序总成绩********\n");
printf("*********0 退出程序********\n");
printf("请选择菜单编号:\n");
scanf("%d",&num);
switch(num)
{
case 1:help();break;
case 2:InputData();break;
case 3:SaveData();break;
case 4:ReadData();break;
case 5:Browe();break;
case 6:Select();break;
case 7:Insert();break;
case 8:Delect();break;
case 9:Modify();break;
case 10:SortTotal();break;
case 0:
k=0;
printf("即将退出程序!");
return 0;
break;
default:
printf("请在0-10之间选择!");
system("pause");
system("cls");
}
}
int help()
{
printf("\n您好,欢迎使用系统帮助!");
printf("\n请您根据您的需求,依照菜单页面提示打出目标数字。");
printf("\n本系统由编号为2021102019的程序员创建");
printf("\n祝您使用愉快!");
}
int InputData()
{
int i=0;
int err=1;
int flag=1;
char ch;
while(flag)
{
printf("input the %dth student\n",i+1);
printf("Please input student ID:");
scanf("%d",&stu[i].ID);
printf("Input Student Name:");
scanf("%s",&stu[i].Name);
printf("Input Student Sex:");
scanf("%s",&stu[i].Sex);
err=0;
while(err==0)
{
printf("Please input English Score:\n");
scanf("%d",&stu[i].English_Score);
if(stu[i].English_Score>=0&&stu[i].English_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input Math Score:\n");
scanf("%d",&stu[i].Math_Score);
if(stu[i].Math_Score>=0&&stu[i].Math_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!");
err=0;
}
}
err=0;
while(err==0)
{
printf("Input C Score:\n");
scanf("%d",&stu[i].C_Score);
if(stu[i].C_Score>=0&&stu[i].C_Score<=100)
err=1;
else
{
printf("输入成绩不规范请重新输入!\n");
err=0;
}
}
stu[i].Total=stu[i].English_Score+stu[i].Math_Score+stu[i].C_Score;
while(1)
{
printf("continue input(1 or 2)?\n");
printf("1-继续输入成绩\n");
printf("2-停止输入成绩\n");
scanf("%c",&ch);
switch(ch)
{
case 1:
i++;
InputData();
break;
case 2:
printf("即将返回主菜单...");
menu();break;
default:
printf("请在1-2中选择!");
}
return i;
}
}
}
int SaveData()
{
int i;
FILE *fp;
char FileName[57];
printf("请输入要保存的文件名:\n");
scanf("%s", FileName);
fp = fopen(FileName, "w");
for (i = 0; i < n; i++)
{
fprintf(fp,"%d%s%s%d%d%d%d",&stu[i].ID,&stu[i].Name,&stu[i].Sex,&stu[i].English_Score,&stu[i].Math_Score,&stu[i].C_Score,&stu[i].Total);
}
printf("保存成功!\n");
fclose(fp);
system("pause");
}
int ReadData()
{
int i=0;
FILE*fp;
int err;
char *FileName;
if((access(FileName,0))==-1)
{
printf("Didn't Found Data!Please select 1 to Input Data!\n");
return-1;
}
fp=fopen(FileName,"rt");
if(fp==NULL)
{
printf("open %s error!\n",FileName);
return 0;
}
do
{
err=fscanf(fp,"%d%s%s%d%d%d%d\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
i++;
}while(err!=EOF);
--i;
fclose(fp);
return i;
}
int Browe()
{
int i,n;
printf("ID Name ENG SEX MATH C Total\n");
for(i=0;i<n;i++)
printf("%d%s%d%d%d%d\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
}
int Select()
{
int i, item, flag;
char s1[N];
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(s1,stu[i].ID) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t性别\t大学英语成绩\t高等数学\tC语言成绩\t总成绩\n");
printf("%d\t%s\t%c\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].ID,stu[i].Name,stu[i].Sex,stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
}
if (0 == flag)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(stu[i].Name, s1) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\t大学英语成绩\t高等数学\tC语言成绩\t总成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%d\t%s\t%c\t%.1f\t%.1f\t%.1f\t%.1f\n", stu[i].ID, stu[i].Name, stu[i].Sex, stu[i].English_Score,stu[i].Math_Score,stu[i].C_Score,stu[i].Total);
}
if (0 == flag)
printf("该姓名不存在!\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
int Insert()
{
int i,Position,err;
int *n;
struct student InsertInfo;
printf("Input Student Information to insert...\n");
printf("Please input student ID:");
scanf("%d",&InsertInfo.ID);
printf("Input Student Name:");
scanf("%s",InsertInfo.Name);
printf("Input Student Sex");
scanf("%c",InsertInfo.Sex);
while(err==0)
{
printf("Please input English Score:");
scanf("%d",&InsertInfo.English_Score);
if(InsertInfo.English_Score>=0&&InsertInfo.English_Score<=100)
continue;
else
err=0;
}
while(err==0)
{
printf("Input Math Score:");
scanf("%d",&InsertInfo.Math_Score);
if(InsertInfo.Math_Score>=0&&InsertInfo.Math_Score<=100)
continue;
else
err=0;
}
while(err==0)
{
printf("Input C Score:");
scanf("%d",&InsertInfo.C_Score);
if(InsertInfo.C_Score>=0&&InsertInfo.C_Score<=100)
continue;
else
err=0;
}
InsertInfo.Total=InsertInfo.English_Score+InsertInfo.Math_Score+InsertInfo.C_Score;
printf("Input Position to Insert:");
scanf("%d",&Position);
if(Position>*n||Position<0)
{
printf("Insert position is illegal!\n");
return-1;
}
for(i=*n;i>Position;i--)
stu[i]=stu[i-1];
stu[i]=InsertInfo;
*n=*n+1;
return 0;
}
int Delect()
{
int i, j, flag = 0;
char s1[N];
printf("请输入要删除学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcpy(stu[i].ID, s1) == 0)
{
flag = 1;
for (j = i; j < n - 1; j++)
{
stu[j] = stu[j + 1];
}
}
}
if (0 == flag){
printf("该学号不存在!!!\n");
}
if (1 == flag){
printf("删除成功!");
n--;
}
system("pause");
}
int Modify()
{
int i, item, num = -1;
char sex1, s1[N], s2[N];
float score1;
printf("请输入要要修改的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].ID, s1) == 0)
{
num = i;
printf("1.修改学号\n");
printf("2.修改姓名\n");
printf("3.修改性别\n");
printf("4.修改大学英语成绩\n");
printf("5.修改高等数学成绩\n");
printf("6.修改C语言成绩\n");
printf("7.退出本菜单\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
switch (item)
{
case 1:
printf("请输入新的学号:\n");
scanf("%s", s2);
strcpy(stu[num].ID, s2);
break;
case 2:
printf("请输入新的姓名:\n");
scanf("%d", stu[num].Name);
break;
case 3:
printf("请输入新的性别:\n");
scanf("%s", &sex1);
stu[i].Sex = sex1;
break;
case 4:
printf("请输入新的大学英语成绩:\n");
scanf("%f", &score1);
stu[num].English_Score = score1;
break;
case 5:
printf("请输入新的高等数学成绩:\n");
scanf("%f", &score1);
stu[num]. Math_Score= score1;
break;
case 6:
printf("请输入新的C语言成绩:\n");
scanf("%f", &score1);
stu[num].C_Score= score1;
break;
case 7: return;
default:printf("请在1-7之间选择\n");
}
}
printf("修改完毕!请及时保存!\n");
}
else{
printf("没有该学生学号!");
}
}
}
int SortTotal()
{
int i,j,n;
struct student temp;
for (i=0;i<n-1;i++)
for(j=0;j<n-1;j++)
{
if(stu[j].Total<stu[j+i].Total)
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
```