学生成绩管理系统,录入成绩时需要在0-100之间,否则需提示且重新输入新的数据
void in() //添加学生信息{ int i,m=0;
char ch[5];
FILE *fp; //定义文件指针
if((fp=fopen("data.txt","a+"))==NULL) //打开指定文件
{ printf("\t\t\t不能打开\n");return;}
while(!feof(fp)) {
if(fread(&stu[m] ,LEN,1,fp)==1)
m++; //m是记录学生的个数
}
fclose(fp);
if(m==0)
printf("\t\t\t目前没有学生信息!\n");
else
{
system("cls");
show(); //显示原有学生信息
}
if((fp=fopen("data.txt","wb"))==NULL)
{ printf("\t\t\t不能打开\n");return;}
for(i=0;i<m;i++) fwrite(&stu[i] ,LEN,1,fp); //向指定的文件输入信息
printf("\t\t\t请选择是否需要录入信息(是/否):");
scanf("%s",ch);
while(strcmp(ch,"是")==0)//判断是否要录入新信息
{
printf("\t\t\t学号:");scanf("%d",&stu[m].num); //输入学生学号
for(i=0;i<m;i++)
if(stu[i].num==stu[m].num)
{
printf("\t\t\t这个学号已经存在,请输入正确的学号!");
getch();
fclose(fp);
return;
}
printf("\t\t\t姓名:");scanf("%s",stu[m].name); //输入学生姓名
printf("\t\t\t语文成绩:");scanf("%lf",&stu[m].chine); //输入语文成绩
printf("\t\t\t数学成绩:");scanf("%lf",&stu[m].math); //输入数学成绩
printf("\t\t\t英语成绩:");scanf("%lf",&stu[m].engls); //输入英语成绩
if(stu[m].chine<0||stu[m].chine>100)
{
printf("\t\t\t语文成绩输入错误请再次输入;");
scanf("%1f",&stu[m].chine);
}
if(stu[m].math<0||stu[m].math>100)
{
printf("\t\t\t数学成绩输入错误请再次输入;");
scanf("%1f",&stu[m].math);
}
if(stu[m].engls<0||stu[m].engls>100)
{
printf("\t\t\t英语成绩输入错误请再次输入;");
scanf("%1f",&stu[m].engls);
}
stu[m].sum=stu[m].chine+stu[m].math+stu[m].engls; //计算出总成绩
if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的文件
{ printf("\t\t\t保存失败!"); getch(); }
else { printf("\t\t\t%s 保存成功!\n",stu[m].name);m++;}
printf("\t\t\t是否继续?(是/否):"); //询问是否继续
scanf("%s",ch);
}
我想知道为什么我的代码中间那一部分检验输入成绩是否在0-100之间的,查出错误后再次输入一个在范围的数据,文件中保留的还是那个不符合范围的,要怎么改正