C语言 关于结构指针数组。

不知道为什么当我输入n为3时,只能输进去两行。
而且感觉程序编的也不大行,
帮忙看看提提意见。

img

#include<stdio.h>
struct students{ 
            int    num;
            char  name[15];
            char  sex;
               int    age;
            double grade;
        };
int main(void)
{
    int n, i, j;
    struct students stu[10], *p[10], temp;
    scanf("%d", &n);
    for(i=0;i<n;i++){
        scanf("%d", &stu[i].num);
        scanf("%s", stu[i].name);
        scanf("%c", &stu[i].sex);
        scanf("%d", &stu[i].age);
        scanf("%lf", &stu[i].grade);
    }
    for(i=0;i<n;i++){
        p[i]=&stu[i];
    }
    for(i=0;i<n;i++){
        for(j=0;j<n-1;j++){
            if(p[j]->grade<p[j+1]->grade){
                temp=*p[j+1];
                *p[j+1]=*p[j];
                *p[j]=temp;
            }
        }
    }
    for(i=0;i<=n;i++){
    printf("%d %s %s %d %d\n", p[i]->num, p[i]->name, p[i]->sex, p[i]->age, p[i]->grade);
    }
}

img

#include <stdio.h>

struct student
{
    int num;
    char name[15];
    char sex;
    int age;
    double grade;
};

int main(void)
{
    int n, i, j;
    struct student stu[10], *p[10], *temp;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d%s %c%d%lf", &stu[i].num, stu[i].name, &stu[i].sex, &stu[i].age, &stu[i].grade);
        p[i] = &stu[i];
    }

    printf("Before:\n");
    for (i = 0; i < n; i++)
        printf("%d %s %c %d %lf\n", p[i]->num, p[i]->name, p[i]->sex, p[i]->age, p[i]->grade);

    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++)
        {
            if (p[j]->grade < p[j + 1]->grade)
            {
                temp = p[j + 1];
                p[j + 1] = p[j];
                p[j] = temp;
            }
        }
    }

    printf("After:\n");
    for (i = 0; i < n; i++)
        printf("%d %s %c %d %lf\n", p[i]->num, p[i]->name, p[i]->sex, p[i]->age, p[i]->grade);
}

在每个scanf 底下加一行while(getchar() != '\n')