获得月份天数
代码:
//法一
#include<stdio.h>
int main() {int y = 0;int m = 0;int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };while (~scanf("%d%*c%d", &y, &m)) {int day = days[m];if ((y % 4 == 0) && ((y % 400 == 0) || (y % 100 != 0))) {if (m == 2) {day++;}}printf("%d\n", day);}return 0;
}
//法二
//#include <stdio.h>
//int main() {
// int year = 0;
// int mouth = 0;
// while (~scanf("%d %d", &year, &mouth)) {
// if (mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11) {
// printf("30\n");
// }
// else if (mouth == 2) {
// if (((year % 4 == 0) && ((year % 400 == 0) || (year % 100 != 0)))) {
// printf("29\n");
// }
// else {
// printf("28\n");
// }
// }
// else {
// printf("31\n");
// }
// }
// return 0;
//}//法一
#include<stdio.h>
int main() {int y = 0;int m = 0;int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };while (~scanf("%d%*c%d", &y, &m)) {int day = days[m];if ((y % 4 == 0) && ((y % 400 == 0) || (y % 100 != 0))) {if (m == 2) {day++;}}printf("%d\n", day);}return 0;
}
//法二
//#include <stdio.h>
//int main() {
// int year = 0;
// int mouth = 0;
// while (~scanf("%d %d", &year, &mouth)) {
// if (mouth == 4 || mouth == 6 || mouth == 9 || mouth == 11) {
// printf("30\n");
// }
// else if (mouth == 2) {
// if (((year % 4 == 0) && ((year % 400 == 0) || (year % 100 != 0)))) {
// printf("29\n");
// }
// else {
// printf("28\n");
// }
// }
// else {
// printf("31\n");
// }
// }
// return 0;
//}
知识点:赋值忽略符( %*c)
如果⽤⼾输⼊ 2020-01-01 ,就会正确解读出年、⽉、⽇。问题是⽤⼾可能输⼊其他 格式,⽐如 2020/01/01 ,这种情况下, scanf() 解析数据就会失败。 为了避免这种情况, scanf() 提供了⼀个赋值忽略符(assignment suppression character) * 。 只要把 * 加在任何占位符的百分号后⾯,该占位符就不会返回值,解析后将被丢弃。
%*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。