如何在C中按子午线(AM和PM)排序?

如何在C中按子午线(AM和PM)排序?,c,C,我有一个问题,试图使我的程序排序的上午和下午。这是我作业要求的一部分,否则我会以24小时制完成。 这是到目前为止我的代码 #include <stdio.h> struct date { int month; int day; int year; int hour; int min; int meridian; }; typedef enum {undergraduate, graduate, post_doc } Studen

我有一个问题,试图使我的程序排序的上午和下午。这是我作业要求的一部分,否则我会以24小时制完成。 这是到目前为止我的代码

#include <stdio.h>


struct date
{
    int month;
    int day;
    int year;
    int hour;
    int min;
    int meridian;
};


typedef enum {undergraduate, graduate, post_doc } StudentLevel;


struct student
{
    char name[20];
    long int banner_id;
    struct date date_of_enrollment;
    struct date time_of_enrollment;
    StudentLevel level;
}data[5];


int lessThan(struct student S1 , struct student S2) {
    struct date A = S1.date_of_enrollment;
    struct date B = S2.date_of_enrollment;
    struct date C = S1.time_of_enrollment;
    struct date D = S2.time_of_enrollment;
    if (A.year < B.year) return 1;
    else if (A.year == B.year && A.month < B.month) return 1;
    else if (A.year == B.year && A.month == B.month && A.day < B.day) return 1;
    else if (A.year == B.year && A.month == B.month && A.day == B.day && C.hour < D.hour) return 1;
    else if (A.year == B.year && A.month == B.month && A.day == B.day && C.hour == D.hour && C.min < D.min) return 1;
     else if (A.year == B.year && A.month == B.month && A.day == B.day && C.hour == D.hour && C.min == D.min & C.meridian < D.meridian) return 1;
    else return 0;
}


int sort(struct student *data)
{
    int i, j;
    struct student x;
    for (i = 0; i < 5; i++){
        for (j = 0; j < 5; j++){
            if (lessThan(data[i], data[j])){
                x = data[j];
                data[j] = data[i];
                data[i] = x;
            }
        }
    }
    return 0;
}


int main ()
{
    
    int i;
    printf ("Enter Name, Banner ID, the date of Enrollment (Month Day Year), the time of enrollemtn (Hour Min Meridian(am or pm) and Student Level(0=Undergraduate, 1=graduate, or 2=Post Doc): \n");
    
    for (i=0;i<2;i++)
        
        scanf ("%s %ld %d %d %d %d %d %d %d",data[i].name,&data[i].banner_id,
               &data[i].date_of_enrollment.month,&data[i].date_of_enrollment.day, &data[i].date_of_enrollment.year, &data[i].time_of_enrollment.hour, &data[i].time_of_enrollment.min, &data[i].time_of_enrollment.meridian, &data[i].level);
    
    
    printf ("You entered : \n");
    sort(data);
    for (i=0;i<2;i++)
        printf("%s %ld %d %d %d %d %d %d %d \n",data[i].name, data[i].banner_id,data[i].date_of_enrollment.month,data[i].date_of_enrollment.day,data[i].date_of_enrollment.year,data[i].time_of_enrollment.hour, data[i].time_of_enrollment.min, data[i].time_of_enrollment.meridian,data[i].level);
    
    
    return 0;
}
#包括
结构日期
{
整月;
国际日;
国际年;
整小时;
int-min;
内经;
};
typedef enum{本科生、研究生、博士后}学生级别;
结构学生
{
字符名[20];
长内横幅;
注册的结构日期;
注册的结构日期时间;
学生水平;
}数据[5];
国际学生(结构学生S1,结构学生S2){
结构日期A=S1。注册日期;
结构日期B=S2。注册日期;
结构日期C=S1。注册时间;
结构日期D=S2。注册时间;
如果(A年对于(i=0;i来说,这很简单。您在上次比较中缺少了一个
&

C.min == D.min & C.meridian < D.meridian
C.min==D.min&C.meridian
应该是

C.min == D.min && C.meridian < D.meridian
C.min==D.min&&C.meridian
为什么要使用它,只需使用24小时时间符号,并在显示时转换为12小时。或者更简单,使用ISO8601日期,它们按字母顺序排序。遗憾的是,这是我的作业要求的一部分。这是一个愚蠢的要求,因为它的设计很糟糕。但是,这对你没有帮助。meridien是如何存储的?我正计划作为枚举来完成我的任务d与under、grad和post doc合作。这就是我目前正在研究的内容。感觉这会使它更容易。但它是一个int。你应该使用0表示AM,1表示PM。非常感谢!让我再多做一点,然后我会回来报告。感谢你的时间,Bart!我有一个问题,打印出正确的答案花了很长时间。我认为它不起作用。有办法解决吗?