注册 登录
编程论坛 C语言论坛

学生成绩管理系统,录入成绩时需要在0-100之间,否则需提示且重新输入新的数据

swj520123 发布于 2022-12-06 17:23, 826 次点击
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之间的,查出错误后再次输入一个在范围的数据,文件中保留的还是那个不符合范围的,要怎么改正
2 回复
#2
cheetah2022-12-07 02:07
再次输入那里好像不是%l(字母l)f  而是%1(数字1)f
#3
好好刷题2022-12-07 10:06
以下是引用cheetah在2022-12-7 02:07:42的发言:

再次输入那里好像不是%l(字母l)f  而是%1(数字1)f

楼上是正解。不过自信点,不是好像1,而是确实是1.

To 楼主:我跑代码验证过了,那三处改了就好了

[此贴子已经被作者于2022-12-7 10:09编辑过]

1