如何在C中按子午线(AM和PM)排序?
我有一个问题,试图使我的程序排序的上午和下午。这是我作业要求的一部分,否则我会以24小时制完成。 这是到目前为止我的代码如何在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
#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!我有一个问题,打印出正确的答案花了很长时间。我认为它不起作用。有办法解决吗?