代码之家  ›  专栏  ›  技术社区  ›  pOrinG

在C中循环几个月

c
  •  2
  • pOrinG  · 技术社区  · 6 年前

    目前我有两个变量在其中存储年-月。

    例子:

    变量1:201711

    变量2: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));
         }
    }
    

    我很难想象一个逻辑来获得月数差异,也很难有效地增加月数。var1&2中存储的值类型和数据(年-月)是灵活的,可以以任何方式存储。

    事先谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Gilles 'SO- stop being evil'    6 年前

    迭代列表的传统方法是

    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)) {
        …
    }
    
        2
  •  1
  •   einpoklum    6 年前

    似乎您的两个变量中的年和月的编码方案是:

    combined_value = year * 100 + month
    

    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;
    

    做这个把戏。我相信你可以从那里出发。