m0_75020954 2023-01-04 22:01 采纳率: 100%
浏览 38
已结题

scanf_s语句输入完数据后不执行后面的程序?

问题遇到的现象和发生背景

#include <stdio.h>
struct student
{
 int num;
 int score[5];
}str[4];
int average(struct student* p)
{
 int sum = 0,i;
 for (i = 0; i < 5; i++)
  sum += p->score[i];
 return sum / 5;
}
int aver(struct student* p)
{
 int sum=0;
 for (; p < p + 4; p++)
  sum += p->score[0];
 return sum / 4;
}
void fail(struct student* p)
{
 int i, j=0,k;
 printf("超过两门不及格的同学有:\n");
 for(;p<p+4;p++)
  for(i=0;i<5;i++)
   if (p->score[i] < 60)
   {
    j++;
    if(j>2) 
    {
     printf("%d ", p->num);
     for (k = 0; k < 5; k++)
      printf("%d ", p->score[k]);
    }
   }
}
void good(struct student* p)
{
 int i, j, k = 0;
 for(;p<p+4;p++)
  for (i = 0; i < 5; i++) {
   if (p->score[i] > 85)
   {
    k++;
    if (k == 5)
    {
     printf("%d ", p->num);
     for (j = 0; j < 5; j++)
      printf("%d ", p->score[j]);
    }
   }
   else if (average(p) > 90)
   {
    printf("%d ", p->num);
    for (j = 0; j < 5; j++)
     printf("%d ", p->score[j]);
   }
  }
}
int main()
{
 int  j;
 struct student* p = str;
 for (; p < p + 4; p++) {
  for (j = 0; j < 5; j++) {
   scanf_s("%d", &p->num);
   rewind(stdin);
   scanf_s("%d", &p->score[j]);
  }
  printf("\n");
 }
 printf("第1门课程的平均成绩为%d", aver(str));
 fail(str);
 good(str);
 return 0;
}
遇到的现象和发生背景,请写出第一个错误信息
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
运行结果及详细报错内容

img

我的解答思路和尝试过的方法,不写自己思路的,回答率下降 我是尝试使用结构体解决然后代码打完也不报错,但是运行的时候输完数据之后好像就是进入了死循环就是一直让输数据不执行下一步。
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2023-01-04 23:17
    关注

    修改如下,改动处见注释,供参考:

    #include <stdio.h>
    struct student
    {
        int num;
        int score[5];
    }str[4];
    int average(struct student* p)
    {
        int sum = 0,i;
        for (i = 0; i < 5; i++)
            sum += p->score[i];
        return sum / 5;
    }
    int aver(struct student* p)
    {
        int sum=0;
        for (; p < str + 4; p++)  //for (; p < p + 4; p++) //修改
            sum += p->score[0];
        return sum / 4;
    }
    void fail(struct student* p)
    {
        int i, j=0,k;
        printf("超过两门不及格的同学有:\n");
        for(;p<str+4;p++){  //for(;p<p+4;p++) //修改
            for(i=0,j=0;i<5;i++){
                if (p->score[i] < 60)
                    j++;
            }              //修改
            if(j>2)        //修改
            {
                printf("%d ", p->num);
                for (k = 0; k < 5; k++)
                    printf("%d ", p->score[k]);
                printf("\n");//修改
            }
        }
    }
    void good(struct student* p)
    {
        int i, j, k = 0;
        for(;p<str+4;p++){  //for(;p<p+4;p++)
            for (i = 0, k = 0; i < 5; i++) { //修改
                if (p->score[i] > 85)
                    k++;
            }                              //修改
            if (k == 5 || average(p) > 90) //修改
            {
                printf("%d ", p->num);
                for (j = 0; j < 5; j++)
                    printf("%d ", p->score[j]);
                printf("\n");          //修改
            }
        }
    }
    int main()
    {
        int  j;
        struct student* p = str;
        for (; p < str + 4; p++) {   //for (; p < p + 4; p++) //修改
            scanf_s("%d", &p->num);  //修改
            for (j = 0; j < 5; j++) {
                //rewind(stdin);   //修改
                scanf_s("%d", &p->score[j]);
            }
               //printf("\n");    //修改
        }
        printf("第1门课程的平均成绩为%d\n", aver(str));
        fail(str);
        good(str);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月13日
  • 已采纳回答 1月5日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程