标题:学生成绩管理系统,录入成绩时需要在0-100之间,否则需提示且重新输入新的数 ...
只看楼主
swj520123
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2022-12-6
结帖率:0
已结贴  问题点数:20 回复次数:2 
学生成绩管理系统,录入成绩时需要在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之间的,查出错误后再次输入一个在范围的数据,文件中保留的还是那个不符合范围的,要怎么改正
搜索更多相关主题的帖子: scanf stu 成绩 输入 printf 
2022-12-06 17:23
cheetah
Rank: 2
等 级:论坛游民
威 望:2
帖 子:110
专家分:92
注 册:2013-6-29
得分:10 
再次输入那里好像不是%l(字母l)f  而是%1(数字1)f

天道酬勤
2022-12-07 02:07
好好刷题
Rank: 2
等 级:论坛游民
帖 子:20
专家分:51
注 册:2022-12-4
得分:10 
以下是引用cheetah在2022-12-7 02:07:42的发言:

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

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

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

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

2022-12-07 10:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510873-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.442770 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved