C - 计算从X年到Y年的所有日期

时间:2011-12-25 20:10:01

标签: c for-loop printf

请IGNORE,无能为力!

实际上只是搞乱了一些基本的文件i / o,在一些嵌套的Loops中但是输出并不是我想要的,尽管我似乎无法让它工作。

#include <stdio.h>

int main(void) {
FILE *pFile;
pFile = fopen("dates.txt", "w");
int day, month, year;
for(day = 1; day <= 31; day++) {
 for(month = 1; month <= 12; month++) {
   for(year = 1900; year <= 2050; year++) {
 if(day < 10 && month < 10) {
   fprintf(pFile, "0%d/0%d/%d\n", day, month, year);
 }else {
   fprintf(pFile, "%d/%d/%d\n", day, month, year);
 }
   }
 }
 }
 return 0;
}

任何提示非常感谢!作为一个抬头,这不是一个家庭作业,只是一些实验。

干杯。

3 个答案:

答案 0 :(得分:3)

您可以使用mktime创建日期。然后添加1天并创建下一个日期。 这样你就可以迭代了。

以下代码显示前200个日期。

#include <time.h>
#include <stdio.h>

int main(){
    struct tm *lt;

    int i=200;

//time_t t=0;  // first second on epoch
    time_t t=-2209010000; // first second on 1900 (works on GCC, dind't test MSVS compiler)

    while(i--){
        lt = localtime(&t);
        printf("YYYY:MM:DD = %04d:%02d:%02d\n", lt->tm_year+1900, lt->tm_mon+1,     lt->tm_mday);
        lt->tm_hour+=24; // adding 24 hours
        t = mktime(lt);
    }
    return 0;
}

顺便说一下 epoch 后面的工作日期。至少在我gcc version 4.4.3的{​​{1}}

答案 1 :(得分:1)

你实际上可以有4个日期和月份组合,在这些组合中,您可能会或不会以0为前缀,而您尝试使用单个if来处理它。

案例1:日期和月份<10,由第一个if处理。

案例2:日&gt; 10和月&lt; 10,未处理

案例3:日&lt; 10和月> 10,未处理

案例4:两者都是&gt; 10.处理其他。

%02d是处理所有案件的选项。

答案 2 :(得分:0)

您可能希望在日循环之前的月循环之前进行年循环(与当前顺序相反)。

你需要让每月最大日的测试变得更聪明(你需要知道闰年的规则(注意1900不是闰年,MS Excel的速度,2000年)。

您可以使用%02d%.2d打印月份和日期的2位数字,因此您只需要一个printf()语句。