日期问题中的格式控制

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
using namespace std;
void NextDay(int &year, int &month, int &day) {
	//存储一下月份和天数的关系
	int dayOfMonth[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int isLeap; //是否是闰年
	isLeap = year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
	if (isLeap) {
		dayOfMonth[2] = 29;
	}
	else {
		dayOfMonth[2] = 28;
	}
	++day;
	if (day > dayOfMonth[month]) {
		day = 1;
		++month;
	}
	if (month > 12) {
		day = month;
		++year;
	}
}

int main() {
	int year, month, day;
	while (scanf("%d%d", &year, &day) != EOF) {
		int next = 1;//NextDay的执行次数,计算当年的第几天
		int curmonth = 1;
		int curday = 1;
		while (1) {
			if (next==day) {
				break;
			}
            else{
                NextDay(year, curmonth, curday);
            }
			++next;
		}
		printf("%d-%2d-%2d\n", year,curmonth,curday);
	}
	return 0;
}

倒数第四行的代码错误 printf("%d-%2d-%2d\n", year,curmonth,curday);实际运行效果如下

错误在于格式控制时,虽然让月份和天数控制在了最小宽度为2,但是并没有标明当数字宽度不足2时如何让程序自己补全
正确的做法是在2前加上一个0,即printf("%d-%02d-%02d\n", year,curmonth,curday);

posted @ 2025-03-15 17:49  聊发  阅读(9)  评论(0)    收藏  举报