一道c语言的问题,运行结果不一致

问一下这段代码在Devc++上没有问题,但在PTA上答案就不对
这是题目

img

这是程序

#include <stdio.h>

struct student {
    char name[11];
    long int age;
    char number[18];
};

int main() {
    int n, i, j;
    long int min = 50000000, min_index;
    struct student a[10];
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%s %d %s", a[i].name, &a[i].age, a[i].number);
        getchar();
    }
    for (j = 0; j < n; j++) {
        for (i = 0; i < n; i++) {
            if (a[i].age < min) {
                min = a[i].age;
                min_index = i;
            }
        }
        printf("%s %d %s\n", a[min_index].name, a[min_index].age, a[min_index].number);
        a[min_index].age = 50000000;
        min = 50000000;
    }
    return 0;
}

在Devc++上的运行

img


在PTA上的运行

img


看了一下程序在双重循环里的判断出了问题,但不知道怎么改,谢谢

修改如下,供参考:

#include <stdio.h>
struct student {
    char name[11];
    long int age;
    char number[18];
};

int main() {
    int n, i, j;
    //long int min = 50000000, min_index;
    struct student a[10], tmp;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%s %ld %s", a[i].name, &a[i].age, a[i].number);
        getchar();
    }
    for (j = 0; j < n - 1; j++) {
        for (i = 0; i < n - 1 - j; i++) {
            if (a[i].age > a[i + 1].age){  //if (a[i].age < min) {
                tmp = a[i];               //min = a[i].age;
                a[i] = a[i + 1];               //min_index = i;
                a[i + 1] = tmp;
            }
        }
        //printf("%s %d %s\n", a[min_index].name, a[min_index].age, a[min_index].number);
        //a[min_index].age = 50000000;
        //min = 50000000;
    }
    for (i = 0; i < n; i++) {
        if (i) printf("\n");
        printf("%s %ld %s", a[i].name, a[i].age, a[i].number);
    }
    return 0;
}

你在排序里面就打印了
这赋值是啥意思
a[min_index].age = 50000000;
min = 50000000;

你这两边代码不一样呢,复制你正常的代码,粘贴到网站平台上试试

稍微改了一下你的循环,本地上能跑,PTA上能不能跑就不清楚了
大致思路就是用一个数组承接下标,然后冒泡排序(可以选择更换,懒得写更优的了)

#include <stdio.h>

struct student {
    char name[11];
    long int age;
    char number[18];
};

int main() {
    int n, i, j;
    long int min = 50000000, min_index;
    struct student a[10];
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%s %d %s", a[i].name, &a[i].age, a[i].number);
        getchar();
    }
    int b[10],t;
    for (int i = 0; i < n; i++)
    {
        b[i] = i;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n - 1 - i; j++)
        {
            if (a[b[j]].age > a[b[j + 1]].age)
            {
                t = b[j];
                b[j] = b[j + 1];
                b[j + 1] = t;
            }
        }
    }
    for (int i = 0; i < n; i++)
    {
        printf("%s %d %s\n", a[b[i]].name, a[b[i]].age, a[b[i]].number);
    }
    return 0;
}