目前我有两个存储年月的变量。
示例:
var1:201711
var2:201801
首先,我想找出变量中的月份是否连续年份。如果没有,那么我想创建一个循环,以便我可以获得var1和2之间的月份。
if( MonthsDifference(var2,var1) = 1 )
{
....
}
else
{
for ( a = 1 ; a <= MonthsDifference(var2 - var1) ; a++)
{
printf("Next month is:[%d]",addmonths(var1,1));
}
}
我无法想象一个逻辑来获得月份差异&amp;也有效地增加了几个月。价值类型&amp; var1&amp;存储的数据(年 - 月) 2是灵活的,可以以任何方式优先。
提前致谢。
答案 0 :(得分:1)
似乎两个变量中的年份和月份的编码方案是:
combined_value = year * 100 + month
因此,较低的两位小数是月份,高位数(通常为4位)是年份。好吧,我们知道如何在C中提取十进制数字:
lower_decimal_digit = num % 10
lower_2_decimal_digits = num % 100
等等(我们也可以用可变数字的数字来做这个,但这里不需要)。同样,我们只能保留更高的数字:
all_but_lower_decimal_digit = num / 10
all_but_lower_2_decimal_digits = num / 100
所以在你的情况下,这两个命令:
int year = combined / 100;
int month = combined % 100;
诀窍。我相信你可以从那里出发。
答案 1 :(得分:1)
迭代列表的常规是
for (var = first_item; end_not_reached(var); var = next_after(var))
您的编码具有正确的日期顺序,即var1 <= var2
早于var1
时的var2
。因此,要检查您是否已到达列表的末尾,您需要做的就是将迭代器与结束日期进行比较。
在给定日期之后的下个月由以下函数给出:
int next_month(int date) {
return date % 100 == 12 ? date + 89 : date + 1;
}
因此:
if (next_month(var1) == var2)
... // the months are consecutive with var1 just before var2
for (var = var1; var <= var2; var = next_month(var)) {
…
}