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

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

#include 
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(;p4;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(;p4;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

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

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

#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;
}