C言語ケーススタディ 時計の作り方2




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



前回作成したプログラムでは一秒ごとに日時がスクロールしながら表示していくものです。 これを画面のほぼ中央に表示して、その部分が更新されていくように変更します。 画面上の指定位置に文字を表示するのはエスケープシーケンスを使用します。 Study Cユーザーの方はエスケープシーケンスについての説明があるので、特別C言語講座文字表示で作ったゲームの基礎(画面の好きな位置に文字を表示)を参照してください。
#include <stdio.h>
#include <time.h>

main()
{
        static char
                *week[] = {"日", "月", "火", "水", "木", "金", "土"};
        time_t  now, prev;
        struct tm
                *tm_now;

        printf("\033[2J");
        prev = -1;
        for(;;){
                now = time(NULL);
                if(prev == now)
                        continue;
                prev = now;
                tm_now = localtime(&now);
                printf("\033[10;30H");
                printf("%4d年%2d月%2d日 %s曜日\n",
                        tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday,
                        week[tm_now->tm_wday]);
                printf("\033[11;30H");
                printf("%2d時%2d分%2d秒\n",
                        tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...
最後にESCキーを押すとプログラムが終了するようにします。 kbhit関数とgetch関数を使用します。 Study Cユーザーの方はこれらの関数についての説明があるので、専用講座文字表示で作ったゲームの基礎(カーソルキーを押していない間に処理を行う)を参照してください。
#include <stdio.h>
#include <time.h>

main()
{
        static char
                *week[] = {"日", "月", "火", "水", "木", "金", "土"};
        time_t  now, prev;
        struct tm
                *tm_now;

        printf("\033[2J");
        prev = -1;
        for(;;){
                if(kbhit()){
                        if(getch() == 0x1B)
                                break;
                }
                now = time(NULL);
                if(prev == now)
                        continue;
                prev = now;
                tm_now = localtime(&now);
                printf("\033[10;30H");
                printf("%4d年%2d月%2d日 %s曜日\n",
                        tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday,
                        week[tm_now->tm_wday]);
                printf("\033[11;30H");
                printf("%2d時%2d分%2d秒\n",
                        tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
        }
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...