2011-12-25 111 views
0

請忽略,無能爲力!C - 計算從X年到Y年的所有日期

只是搞了一些基本的文件I/O真的,在一些嵌套的循環,但輸出不是我想要的,但我似乎無法得到它的工作。

#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; 
} 

任何提示非常感謝!作爲一個領導,這不是一項家庭作業任務,只是一些實驗。

乾杯。

+0

不要忘了釋放'pFile'。 – Aan 2011-12-25 20:14:41

+1

嘗試'%02d'作爲格式規範,它會爲您節省中間的「if」。 – Mat 2011-12-25 20:15:59

+2

@Adban:'free()'?你可能考慮了'fclose()'。好點子。 – 2011-12-25 20:16:15

回答

0

您可能需要在日循環之前的月份循環之前的年份循環(當前訂單的相反)。

你需要測試一個月的最大日期cleverer(你需要知道閏年的規則(注意1900年不是閏年,步伐MS Excel和2000年)

您可以使用%02d%.2d打印2個位數代表月份的一天,所以你只需要一個printf()聲明。

1

實際上,你可以有日,月的4種組合中,你可能會或可能不會前綴與0,你正試圖處理與單個如果其他。

案例1:日間和月份< 10,先處理if。

情況2:天> 10和月< 10,未處理

情況3:<日10和月> 10,未處理

情況4:兩者都> 10處理的在其他。

%02d是處理所有情況的選項。

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.3x86_64 GNU/Linux

+0

在時代出現之前,不適用於日期(太遠)可能成爲問題,特別是在32位系統中,向後伸展會使您回到1901年12月13日星期五左右(對某些人來說倒黴!)。同樣工作的前鋒; 2038年1月的32位系統在1970-01-01 00:00:00 +00:00時代停止運轉。要求的範圍(1900-2050)超過了這些限制。在64位系統上,你可能沒問題。 – 2011-12-25 22:06:03

+0

@JonathanLeffler查看更新。它顯示從1900年的日期。是由於64位Linux?我不確定。我所有的系統都是64位的。 – 2011-12-25 22:54:44

+0

是的 - 像MacOS X這樣的64位系統可以朝着(超越?)1 AD(CE)的方向發展,向前超過9999 AD(CE)。在時代的任何一側,32位系統的使用時間限制在±68年內(需要花費大約一個月的時間)。而當我說'32位系統時,我的意思是系統中'time_t'是一個32位有符號類型(這在大多數32位系統中是這種情況)。 – 2011-12-26 01:43:09