c语言练习题29:获得月份天数

获得月份天数

代码:

//法一
#include
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 
//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
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 
//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 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的 变量,解读后不必返回。

你可能感兴趣的:(c语言,算法,开发语言)