時間の計測 †
time.h の time関数は、1970年1月1日0時0分からの経過時間(秒)をlong型で返します。
時間を計り始めた時刻を t0、時間を計り終えた時刻を t1 とすると、t1 から t0 を引くことで経過時間(秒)を求めることができます(プログラム1)。
#include <time.h> int main(void) { long t0 = time(NULL); int i; for (i = 0; i < 1000000; i++ ) {} long t1 = time(NULL); long t = t1 - t0; printf("%ds\n", t); return 0; }
時間計測機能付き計算ゲーム †
以前に作成した計算ゲームに、時間計測の機能をつけてゲームを面白くしましょう。 10問正解するまでの時間を計測します。
/* * 時間計測機能付き計算ゲーム */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand((unsigned int) time(NULL)); long t = time(NULL); // 開始時刻 int s = 0; // 得点 while (s < 10) { int i = rand() % 99 + 1; int j = rand() % 99 + 1; printf("第%d問: %d + %d = \n", s + 1, i, j); int a; scanf("%d", &a); if (a == i + j) { printf("正解!\n"); s++; } else { printf("間違い!\n"); } } printf("時間: %d秒", time(NULL) - t); return 0; }
スピード計算ゲーム †
次に、制限時間内に何問正解できるかを競うゲームにしてみましょう。
/* * スピード計算ゲーム */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand((unsigned int) time(NULL)); long limit = 30; // 制限時間(秒) printf("制限時間: %d秒\n", limit); long t = time(NULL); // 開始時刻 int s = 0; // 得点 while (time(NULL) < t + limit) { int i = rand() % 99 + 1; int j = rand() % 99 + 1; printf("第%d問: %d + %d = \n", s + 1, i, j); int a; scanf("%d", &a); if (time(NULL) > t + limit) { break; } // 時間切れ if (a == i + j) { printf("正解!\n"); s++; } else { printf("間違い!\n"); } } printf("%d問正解", s); return 0; }