#include #include #include void main() { COORD Pos; // コンソールのカーソル位置 HANDLE hOut; // ハンドル // 出力先のハンドルを取得 hOut = GetStdHandle( STD_OUTPUT_HANDLE ); // ローカルの時間を取得しておく time_t NowTime = time(NULL); struct tm* NowLocalTime = localtime(&NowTime); int Sec = 0; // ローカルの時間をシャットダウンの時間を合わせる int ShutDownHour = NowLocalTime->tm_hour; int ShutDownMin = NowLocalTime->tm_min; int ShutDownSec = NowLocalTime->tm_sec; // 処理が実行される時間をローカルじかんより20秒だけ増やす if( 40 < ShutDownSec ) { ShutDownMin++; ShutDownSec = ( 20 + ShutDownSec ) % 60; } else { ShutDownSec += 20; } // 時間と分をすべて秒に換算して、合計しておく int ShutDownSumSec = ShutDownHour * 60 * 60 + ShutDownMin * 60 + ShutDownSec; // 残り時間の初期化 int RemainderSumSec = 0; // フラグ bool flag = true; // ここからループ処理 while( 1 ) { // ローカルの時間を再取得 NowTime = time(NULL); NowLocalTime = localtime(&NowTime); // 秒が増えたら、表示を更新する if( Sec != NowLocalTime->tm_sec ) { Sec = NowLocalTime->tm_sec; printf("%d年%d月%d日%2d時%2d分%2d秒\n", (NowLocalTime->tm_year) + 1900, (NowLocalTime->tm_mon) + 1, NowLocalTime->tm_mday, NowLocalTime->tm_hour, NowLocalTime->tm_min, NowLocalTime->tm_sec ); // SumSecは1ずつ増えていく int SumSec = NowLocalTime->tm_hour * 60 * 60 + NowLocalTime->tm_min * 60 + NowLocalTime->tm_sec; if( flag == true ) { // 残り時間の計算 if( SumSec <= ShutDownSumSec ) { RemainderSumSec = ShutDownSumSec - SumSec; } else { RemainderSumSec = 12 * 60 * 60 + ShutDownSumSec - SumSec; } } printf("%2d\n文字が表示されるまであと%d時間%d分%d秒\n", RemainderSumSec, RemainderSumSec / ( 60 * 60 ), ( RemainderSumSec / 60 ) % 60, RemainderSumSec % 60 ); // 残り時間がゼロのときの処理 if( RemainderSumSec == 0 ) { printf("20秒が経過しました。\n"); flag = false; // 特定の処理をここに書く。 } // カーソルを通常位置に戻す Pos.X = 0; Pos.Y = 0; SetConsoleCursorPosition( hOut, Pos ); } } getchar(); }