30
シンプルなストップウォッチを実装する
チャレンジ あなたの仕事は、プログラムを作成することです。プログラムは、1秒に1回(プログラムの開始時を含む)、プログラムが開始されてからの経過時間を出力します。 ルール 時間はhh:mm:ss形式で印刷する必要があります。(1桁の値の場合は先行ゼロ) タイムスタンプは、CR、LF、またはCRLFで区切る必要があります。(先頭に空白がない) 毎秒新しい時間が表示されなければなりません。(stdoutは1秒間バッファリングできません) 23:59:59を過ぎて実行された場合のプログラムの動作は未定義です。 sleep(1)印刷、計算、ループなどのオーバーヘッドが1秒に累積するたびに特定の1秒がスキップされる場合でも使用できます。 出力例: 00:00:00 00:00:01 00:00:02 00:00:04 00:00:05 ⋮ 00:00:03処理のオーバーヘッドのためにここにないことに注意してください。実際にスキップされた値(もしあれば)は、もちろん実装やシステムに依存します。 Cでの参照実装:(POSIX互換システムのみ) #include <unistd.h> // sleep() #include <tgmath.h> #include <assert.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #ifndef __STDC_IEC_559__ #error "unsupported double" #endif static_assert(sizeof(double) == 8, "double must have double precision"); #define MAX_PRECISE_DOUBLE ((double)(1ULL << 52)) …