diff --git a/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/main.c b/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/main.c new file mode 100644 index 0000000..037a5bf --- /dev/null +++ b/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/main.c @@ -0,0 +1,99 @@ +#include + +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; +} \ No newline at end of file diff --git a/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/readme.md b/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/readme.md new file mode 100644 index 0000000..7be54c2 --- /dev/null +++ b/C Crash Course/16 Sturcture&Union&Enum/stucture/prelesson/stucture-as-func-parameter/readme.md @@ -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 锛坧.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" \ No newline at end of file