【发布时间】:2022-01-22 23:21:50
【问题描述】:
我需要找到最小的日期(年、月、日、小时、分钟、秒),我的代码正在运行,但它看起来很糟糕而且很长。我能做些什么来避免这个阶梯使我的代码可读? (我只想使用 stdio.h )
#include <stdio.h>
typedef struct DateTime_s {
int year , month , day ;
int hours , minutes , seconds ;
} DateTime ;
void DataTime(const DateTime *mas , int x){
int i;
struct DateTime_s min={40000,400000,4000000,400000,400000,4000};
for(i=0;i<x;i++){
if(mas[i].year<min.year){
min=mas[i];
}
else if(mas[i].year==min.year){
if(mas[i].month<min.month){
min=mas[i];
}
else if(mas[i].month==min.month){
if(mas[i].day<min.day){
min=mas[i];
}
else if(mas[i].day==min.day){
if(mas[i].hours<min.hours){
min=mas[i];
}
else if(mas[i].hours==min.hours){
if(mas[i].minutes<min.minutes){
min=mas[i];
}
else if(mas[i].minutes==min.minutes){
if(mas[i].seconds<min.seconds){
min=mas[i];
}
else if(mas[i].seconds==min.seconds){
min=mas[i];
}
}
}
}
}
}
}
printf("%d %d %d %d %d %d",min.year,min.month,min.day,min.hours,min.minutes,min.seconds);
}
int main() {
int x,i;
struct DateTime_s mas[50001];
scanf("%d",&x);
for(i=0;i<x;i++){
struct DateTime_s b;
scanf("%d %d %d %d %d %d",&b.year, &b.month,&b.day,&b.hours,&b.minutes,&b.seconds);
mas[i]=b;
}
DataTime(mas,x);
return 0;
}
【问题讨论】:
-
如果您的代码工作正常,并且您正在寻找代码审查 cmets,请前往 Code Review
-
将时间戳转换为纪元时间可能更有意义。这将花费额外的费用,但会将比较链减少为单次检查。但如果你还是要这样做......
-
如果你使用一致的缩进,代码会更容易阅读。缩进每个
else if是不习惯的。 -
我投票结束这个问题,因为它属于代码审查的 "migrated"。
-
放大 Lundin 的评论:首先要做的是为长 if/else 链的 N 个分支中的每一个使用 same 缩进级别。尽管这可以说是“不一致的”,但几乎每个人都同意这比让它无情地向右移动要好得多。
标签: c readability code-readability