C - рассчитать все даты от года X до года Y - PullRequest
0 голосов
/ 26 декабря 2011

Пожалуйста, игнорируйте, некомпетентность, как ее лучше!

Просто возиться с некоторыми базовыми файловыми операциями ввода-вывода, в некоторых вложенных для циклов, но вывод не совсем то, что я хочу,хотя я не могу заставить его работать.

#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 ]

3 голосов
/ 26 декабря 2011

Вы можете использовать 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;
}

Кстати, работает даты позади эпоха .По крайней мере, на моем gcc version 4.4.3 в x86_64 GNU/Linux

1 голос
/ 26 декабря 2011

На самом деле у вас может быть 4 комбинации дня и месяца, в которых вы можете или не можете добавлять префикс к 0, который вы пытаетесь обработать одним, если еще.

Случай 1: День и месяц <10, обрабатывается первым, если. </p>

Случай 2: день> 10 и месяц <10, без обработки </p>

Случай 3: день <10 и месяц> 10, без обработки

Случай 4: Обе> 10 обрабатываются в другом.

% 02d - опция для обработки всех случаев.

0 голосов
/ 26 декабря 2011

Возможно, вам нужен годовой цикл до цикла месяца перед дневным циклом (обратный текущему порядку).

Вам нужно сделать тестирование для максимального дня месяца более понятным (вынеобходимо знать правила для високосных лет (учитывая, что 1900 год не был високосным, темп MS Excel и 2000 был).

Вы можете использовать %02d или %.2d для печати 2 цифр за месяци день, так что вам нужен только один printf() оператор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...