書いたものの代わりに「月/日」の正しい関数を書くにはどうすればよいですか?

下から

だから、これは私の問題です:

12月12日など、日付をサポートする列挙型を記述します。次に、翌日を生成する関数を追加します。つまりnextday(date)、12月12日は12月13printdate(date)日です。日付を読みやすく印刷する関数も記述しますこの関数は、2月が28日であり、毎月何日であるかを最もよく知っていると想定できます。2つのメンバーで構造体を使用します。1つは月で、2つ目は月の日です— int(またはshort)。次に、1月1日の日付を印刷し、翌日1月2日を印刷します。これは、2月28日、3月14日、10月31日、および12月31日の日付に対して行います。

そしてそれが私の解決策です

#include <stdio.h>
#include <ctype.h>

typedef enum month { jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec } month;
typedef struct date { enum month m; int d; } date;

void print_month(struct date date) { //simple function for displaying month and day
    switch (date.m) {
      case jan:
        printf("January day %d\n", date.d);
        break;
      case feb:
        printf("February day %d\n", date.d);
        break;
      case mar:
        printf("March day %d\n", date.d);
        break;
      case apr:
        printf("April day %d\n", date.d);
        break;
      case may:
        printf("May day %d\n", date.d);
        break;
      case jun:
        printf("June day %d\n", date.d);
        break;
      case jul:
        printf("July day %d\n", date.d);
        break;
      case aug:
        printf("August day %d\n", date.d);
        break;
      case sep:
        printf("September day %d\n", date.d);
        break;
      case oct:
        printf("October day %d\n", date.d);
        break;
      case nov:
        printf("November day %d\n", date.d);
        break;
      case dec:
        printf("December day %d\n", date.d);
        break;
      default:
        printf("Out of range!");
        break;
    }
}

enum month next_day(struct date next) { //next month|day function which is the problem.
    if (next.m == jan || mar || may || jul || aug || oct || dec) {
        next.d + 1 % 31;
    }
    else if (next.m == apr || jun || sep || nov) {
        next.d + 1 % 30;
    }
    else if (next.m == feb) {
        next.d + 1 % 28;
        if (next.d > 28)
            next.m = mar;
    }

    return (month)next.m;
}

int main(void) {
    struct date date_1 = { feb, 28 };
    struct date date_2 = { mar, 14 };
    struct date date_3 = { oct, 31 };
    struct date date_4 = { dec, 31 };

    print_month(date_1);
    print_month(date_2);
    print_month(date_3);
    print_month(date_4);
    printf("\n");

    print_month(next_day(date_1)); //err C2440 
    print_month(next_day(date_2)); //err C2440
    print_month(next_day(date_3)); //err C2440
    print_month(next_day(date_4)); //err C2440
    printf("\n\n");

    return 0;
}
chqrlie

私はいくつかの提案があります:

  • 日付構造には、うるう年のサポートを可能にする年が含まれている必要があります。
  • print_date()文字列の配列を使用して簡略化できます。
  • 関数next_day()は日付を返す必要があります。

変更されたバージョンは次のとおりです。

#include <stdio.h>

typedef enum month { jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec } month;
typedef struct date { enum month m; int d; int y; } date;

static const char * const month_name[] = {
    "January",  "February", "March",
    "April",    "May",      "June",
    "July",     "August",   "September",
    "October",  "November", "December",
};

void print_month(struct date date) { //simple function for displaying month and day
    switch (date.m) {
      case jan:
      case feb:
      case mar:
      case apr:
      case may:
      case jun:
      case jul:
      case aug:
      case sep:
      case oct:
      case nov:
      case dec:
        printf("%s %d, %d\n", month_name[date.m], date.d, date.y);
        break;
      default:
        printf("Out of range!\n");
        break;
    }
}

date next_day(struct date next) { //next month|day function which is the problem.
    int last_day;
    switch (next.m) {
      case jan:
      case mar:
      case may:
      case jul:
      case aug:
      case oct:
      case dec:
        last_day = 31;
        break;
      case apr:
      case jun:
      case sep:
      case nov:
        last_day = 30;
        break;
      case feb:
        // check for Gregorian leap years
        // see https://stackoverflow.com/questions/3220163/how-to-find-leap-year-programmatically-in-c
        if (next.y % 4 == 0 && (next.y % 100 != 0 || next.y % 400 == 0))
            last_day = 29;
        else
            last_day = 28;
        break;
      default:
        return next;
    }
    if (next.d++ == last_day) {
        next.d = 1;
        if (next.m++ == dec) {
            next.m = jan;
            next.y++;
        }
    }
    return next;
}

int main() {
    struct date date_1 = { feb, 28, 2020 };
    struct date date_2 = { mar, 14, 2020 };
    struct date date_3 = { oct, 31, 2020 };
    struct date date_4 = { dec, 31, 2020 };
    struct date date_5 = { feb, 28, 2021 };

    print_month(date_1);
    print_month(date_2);
    print_month(date_3);
    print_month(date_4);
    print_month(date_5);
    printf("\n");

    print_month(next_day(date_1));
    print_month(next_day(date_2));
    print_month(next_day(date_3));
    print_month(next_day(date_4));
    print_month(next_day(date_5));
    printf("\n\n");

    return 0;
}

出力:

2020年2月28日2020年
3月14日2020年
10月31日2020年
12月31日
20212月28日2020年2

月29日2020年
3月15日2020年
11
月1日20211月1日2021年
3月1日

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JSON.swiftの代わりにSwiftyJSONを使用するようにこの関数を書き直すにはどうすればよいですか?

分類Dev

文字列の代わりに使用するために、Pythonで作成した辞書の値を取得するにはどうすればよいですか?

分類Dev

LESS関数の代わりにCSS関数を使用するにはどうすればよいですか?

分類Dev

getHoursの代わりにこの関数でgetMinutesを使用するにはどうすればよいですか?

分類Dev

先のとがった関数を書くにはどうすればよいですか?

分類Dev

ファイルの代わりに変数を使用してコマンドを書き込むにはどうすればよいですか?

分類Dev

mapのような高階関数を書いたり、Javaで減らしたりするにはどうすればよいですか?

分類Dev

固定の月日をSQL年関数と組み合わせるにはどうすればよいですか?

分類Dev

下に新しいマップを追加する代わりに、既存のマップを上書きするにはどうすればよいですか(OpenLayers)?

分類Dev

リストに正しく作用する関数を書くにはどうすればよいですか?

分類Dev

onChangeの代わりにonClickで関数を使用するにはどうすればよいですか?

分類Dev

open関数でshの代わりにbashを使用するにはどうすればよいですか?

分類Dev

結合関数の代わりにforeachを使用するにはどうすればよいですか?

分類Dev

関数に2つの可変日付を書き込むにはどうすればよいですか?

分類Dev

Loop for Common Lispでこの条件文を正しく書くにはどうすればよいですか?

分類Dev

ファイル書き込み関数を変更して「;」と書き込むにはどうすればよいですか。「(」「)」の中にある場合、「、」の代わりに?

分類Dev

関数の戻り値をRの行列に書き込むにはどうすればよいですか?

分類Dev

たくさんのifelseステートメントなしでこの関数を書くにはどうすればよいですか?

分類Dev

次の前のアイコンの代わりにBootstrap日付ピッカーで来月前月を取得するにはどうすればよいですか?

分類Dev

この pug 関数をハンドルバーに書くにはどうすればよいですか?

分類Dev

辞書の値として複数の関数を保存するにはどうすればよいですか?

分類Dev

Powershell関数を正しく文書化するにはどうすればよいですか?

分類Dev

raspberty piのSSL証明書を*正しく*修正するにはどうすればよいですか?

分類Dev

このPythonメソッドが文字列をstdoutに書き込む代わりに返すようにするにはどうすればよいですか?

分類Dev

繰り返し関数の代わりにreduce関数を使用するにはどうすればよいですか?

分類Dev

この関数を書くにはどうすればよいですかx ^ .3 *(1-x)^。7

分類Dev

2日間にわたる2回の正しい時間間隔をすばやく計算するにはどうすればよいですか?

分類Dev

欠落している月の値の代わりに過去の値を挿入するにはどうすればよいですか?

分類Dev

`net.Pipe()`の `Read`と` Write`を正しく書き込むにはどうすればよいですか

Related 関連記事

  1. 1

    JSON.swiftの代わりにSwiftyJSONを使用するようにこの関数を書き直すにはどうすればよいですか?

  2. 2

    文字列の代わりに使用するために、Pythonで作成した辞書の値を取得するにはどうすればよいですか?

  3. 3

    LESS関数の代わりにCSS関数を使用するにはどうすればよいですか?

  4. 4

    getHoursの代わりにこの関数でgetMinutesを使用するにはどうすればよいですか?

  5. 5

    先のとがった関数を書くにはどうすればよいですか?

  6. 6

    ファイルの代わりに変数を使用してコマンドを書き込むにはどうすればよいですか?

  7. 7

    mapのような高階関数を書いたり、Javaで減らしたりするにはどうすればよいですか?

  8. 8

    固定の月日をSQL年関数と組み合わせるにはどうすればよいですか?

  9. 9

    下に新しいマップを追加する代わりに、既存のマップを上書きするにはどうすればよいですか(OpenLayers)?

  10. 10

    リストに正しく作用する関数を書くにはどうすればよいですか?

  11. 11

    onChangeの代わりにonClickで関数を使用するにはどうすればよいですか?

  12. 12

    open関数でshの代わりにbashを使用するにはどうすればよいですか?

  13. 13

    結合関数の代わりにforeachを使用するにはどうすればよいですか?

  14. 14

    関数に2つの可変日付を書き込むにはどうすればよいですか?

  15. 15

    Loop for Common Lispでこの条件文を正しく書くにはどうすればよいですか?

  16. 16

    ファイル書き込み関数を変更して「;」と書き込むにはどうすればよいですか。「(」「)」の中にある場合、「、」の代わりに?

  17. 17

    関数の戻り値をRの行列に書き込むにはどうすればよいですか?

  18. 18

    たくさんのifelseステートメントなしでこの関数を書くにはどうすればよいですか?

  19. 19

    次の前のアイコンの代わりにBootstrap日付ピッカーで来月前月を取得するにはどうすればよいですか?

  20. 20

    この pug 関数をハンドルバーに書くにはどうすればよいですか?

  21. 21

    辞書の値として複数の関数を保存するにはどうすればよいですか?

  22. 22

    Powershell関数を正しく文書化するにはどうすればよいですか?

  23. 23

    raspberty piのSSL証明書を*正しく*修正するにはどうすればよいですか?

  24. 24

    このPythonメソッドが文字列をstdoutに書き込む代わりに返すようにするにはどうすればよいですか?

  25. 25

    繰り返し関数の代わりにreduce関数を使用するにはどうすればよいですか?

  26. 26

    この関数を書くにはどうすればよいですかx ^ .3 *(1-x)^。7

  27. 27

    2日間にわたる2回の正しい時間間隔をすばやく計算するにはどうすればよいですか?

  28. 28

    欠落している月の値の代わりに過去の値を挿入するにはどうすればよいですか?

  29. 29

    `net.Pipe()`の `Read`と` Write`を正しく書き込むにはどうすればよいですか

ホットタグ

アーカイブ