This commit is contained in:
hairrrrr
2020-02-10 14:11:58 +08:00
parent d065ea296a
commit 93288dfded
2 changed files with 117 additions and 0 deletions

View File

@@ -0,0 +1,99 @@
#include<stdbool.h>
struct date {
int month;
int day;
int year;
//月 - 日 - 年 咱得国际化!
};
bool isleap(struct date d);//判断是否为闰年
int NumberOfDays(struct date d);//判断天数
bool ErrorInputCheck(struct date d);//检查是否是合法输入
int main(void) {
struct date today, tomorrow;
int flag = 0;
printf("Input today's date:(format: month day year)\n");
scanf("%d %d %d", &today.month, &today.day, &today.year);
if (ErrorInputCheck(today))
return 0;
if (today.day != NumberOfDays(today)) {
tomorrow = today;
tomorrow.day++;
}
else if (today.month != 12) {
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}
else {
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year + 1;
}
printf("%d - %d - %d\n", tomorrow.month, tomorrow.day, tomorrow.year);
return 0;
}
bool ErrorInputCheck(struct date d) {
bool flag = false;
if (d.day <= 0 || d.day > 31) {
printf("illegal input of day!\n");
flag = true;
}
if (d.month <= 0 || d.month > 12) {
printf("illegal input of month!\n");
flag = true;
}
if (d.year < 0) {
printf("illegal year!\n");
flag = true;
}
return flag;
}
int NumberOfDays(struct date d) {
int day = 0;
int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (d.month == 2 && isleap)
day = 29;
else
day = days[d.month - 1];
return day;
}
bool isleap(struct date d) {
bool leap = false;
int year = d.year;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
leap = true;
return leap;
}

View File

@@ -0,0 +1,18 @@
#### 结构体作为函数参数
**明天的日期**
*写一个程序:输入今天的日期,求明天的日期*
看着这个问题简单,实际上稍微有点技巧.
给出下面四个特殊日期,大家可以思考一下:
>2020 - 1 -31
>2020 - 11 - 31
>2020 - 12 - 31
>2000 - 2 - 28
#### Use sturcture itself as a function's parameter
it's not an efficient way
>K & R said p.131
>"if a large structure is to be passed to a function,
>in is generally more efficent to pass a pointer than to copy the whole structure"