C言語のきほん「曜日を求める」

スポンサーリンク
C言語

今回は、西暦年・月・日を読み込んで、その曜日を表示するプログラムをご紹介しよう。

なお、本プログラムは、
 Windows 11 Home(23H2)上で、Visual Studio Code(1.95.3)を使用して作成し、gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0で コンパイルしている。

//曜日を求める(その1)

#include <time.h>
#include <stdio.h>

//year年month月day日の曜日を求める
int dayofweek(int year,int month,int day)
{
    struct tm t;
    
        t.tm_year = year - 1900;    //年を調整
        t.tm_mon = month -1;        //月を調整
        t.tm_mday = day;            //日
        t.tm_hour = 0;              //時
        t.tm_min = 0;               //分
        t.tm_sec = 0;               //秒
        t.tm_isdst = -1;            //夏時間

        if (mktime(&t) == (time_t)-1)   //変更に失敗したら
            return -1;                  //-1を返却
        return t.tm_wday;               //mktime関数によって、曜日を返却
    
    
}

int main(void)
{
    int y,m,d,w;
    char *ws[] = {"日","月","火","水","木","金","土"};

    printf("曜日を求めます\n");
    printf("年:");  scanf("%d",&y);
    printf("月:");  scanf("%d",&m);
    printf("日:");  scanf("%d",&d);

    w = dayofweek(y,m,d);

    if( w != -1)
        printf("それは%s曜日です\n",ws[w]);
    else 
        printf("求められません\n");

    return 0;
} 

実行結果

曜日を求めます
年:2024
月:12
日:4
それは水曜日です

曜日を求めるのに利用しているのは、mktime関数である。

この関数は、要素別の時刻tm構造体型の時刻(地方時)を、暦時刻time_t型の値に変換する。

本プログラムで定義している関数dayofweekは、受け取った年・月・日の3値を基に要素別の時刻を作り、それからmktime関数を呼び出している。

参考)新・明解C言語 中級編 柴田 望洋(著)SBクリエイティブ

コメント

タイトルとURLをコピーしました