mirror of
https://github.com/hairrrrr/C-CrashCourse.git
synced 2026-02-08 05:03:17 +08:00
2-10
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user