C言語関係掲示板

過去ログ

No883 12ヶ月まとめて出力するカレンダー

[戻る] [ホームページ]
No.11439

出力方法について
投稿者---saze(2003/12/24 15:41:00)


はじめまして。出力方法でわからない点があるので投稿させていただきます。
作成しているものはカレンダーなのですが。入力された年にあわせて12ヶ月まとめて出力しなければならないもので、4ヶ月づつ横に出力しなければなりません。
大変初歩的なことかと思いますがどうか教えて下さい。


No.11440

Re:出力方法について
投稿者---NykR(2003/12/24 20:08:44)


1ヶ月を30日で統一してますけど。
initを改造すれば何とかなると思います。

#include <stdio.h>

typedef struct {
    int printed;
    int offset;
    int max;
} Month;

Month   g_year[12];

void init(void)
{
    int i;

    for (i = 0; i < 12; i++) {
        g_year[i].printed = 0;
        g_year[i].offset = i * 30;
        g_year[i].max = 30;
    }
}

void print_line(int month)
{
    int i;

    printf("%*s", 3 * ((g_year[month].printed + g_year[month].offset) % 7), "");

    for (i = (g_year[month].printed + g_year[month].offset) % 7; i < 7; i++) {
        if (g_year[month].printed >= g_year[month].max) {
            printf("   ");
        } else {
            printf("%3d", ++g_year[month].printed);
        }
    }
}

void print_4_months(int first)
{
    int i;
    int end_flg[4] = {0};

    for (;;) {
        int flg = 0;
        for (i = 0; i < 4; i++) {
            print_line(i+first);
            putchar(' ');
            if (g_year[i+first].printed >= g_year[i+first].max) {
                end_flg[i] = 1;
            }
            flg += end_flg[i];
        }
        puts("");
        if (flg == 4)
            break;
    }
}

int main(void)
{
    init();
    print_4_months(0); puts("");
    print_4_months(4); puts("");
    print_4_months(8); puts("");

    return 0;
}


No.11451

Re:出力方法について
投稿者---saze(2003/12/25 11:19:33)


お答えありがとうございます。
一つ思うのですが、このプログラムは動作しない条件などあるのでしょうか?UNIXだとエラーになってしまうのですが。
稚拙な質問で大変申し訳ないのですが。



No.11453

Re:出力方法について
投稿者---NykR(2003/12/25 13:47:18)


>このプログラムは動作しない条件などあるのでしょうか?
>UNIXだとエラーになってしまうのですが。

エラーの内容と場所も書いてもらえませんか?



それはそうと少し変えます。これで動くようになるかどうかはわかりませんが。
void print_line(int month)
{
    int i, num_of_blanks = (g_year[month].printed + g_year[month].offset) % 7;

    for (i = 0; i < num_of_blanks; i++) {
        printf("   ");
    }
    for (i = num_of_blanks; i < 7; i++) {
        if (g_year[month].printed >= g_year[month].max) {
            printf("   ");
        } else {
            printf("%3d", ++g_year[month].printed);
        }
    }
}

void print_4_months(int first)
{
    for (;;) {
        int flg = 0, i;
        for (i = 0; i < 4; i++) {
            print_line(i+first);
            putchar(' ');
            if (g_year[i+first].printed >= g_year[i+first].max) {
                flg++;
            }
        }
        puts("");
        if (flg == 4)
            break;
    }
}


No.11457

Re:出力方法について
投稿者---saze(2003/12/25 14:55:39)


>エラーの内容と場所も書いてもらえませんか?

すいません、エラー文は、
Function prototypes are an ANSI feature.
errors seen skipping the code including function.
と言った感じです。行数は9、19、34、50に同じものが出ています。
ちなみにそういう問題では無いのかと思いますがBorlandでは動いていたん
ですが・・・。





No.11458

Re:出力方法について
投稿者---saze(2003/12/25 15:03:48)


次から次へとすみません。
しかしどうやら コンパイラが古いことで動かないだけのようです。
大変申し訳ありませんでした。

ソースは参考にさせて頂きます。ありがとうございます。