C言語:clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラム

C言語:clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラム C言語初級

C言語のclock()関数は、実行した際のCPU時間を返してくれます。
このclock関数で得られたCPU時間の差分を使ってキーボードのA~Zまでの入力速度を計測してみようと思います。

今回利用する主な関数は以下の通りです。

関数名 機能 必要なヘッダファイル
clock() CPU時間を返す time.h
strcmp() 文字列の一致をチェック string.h

clock()関数の基本的な解説は以下を参考にしてください。

C言語:clock関数を使ってある処理にかかった時間を計測する
C言語のclock()関数を使うとある処理に掛かる時間計測が可能です。 この記事では、サンプルプログラムを使ってclock関数の利用例を示します。

実行イメージ

キーボード入力中の画面(Enterキーを押すと計測開始です)
C言語:clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラム

キー入力ミスがあった場合(ひどい言葉が投げつけられます)
C言語:clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラム

A~Zまで正確に入力出来た場合(計測秒数によりメッセージが異なります)
C言語:clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラム

計測する部分のプログラムはこれだけ!

実際に入力速度を計測する部分のプログラムですが、すごく短いです。

/* タイマー開始 */
start = clock();

printf("  >");
scanf("%s", in ) ;

/* タイマー終了 */
end = clock();

scanf関数の前後にclock()関数を入れているだけです。
あとは、最初と最後の差分を取ればいいので、

/* 打ち込みに掛かった時間を計算(秒に直す) */
total_time = (double)(end - start) / CLOCKS_PER_SEC ;

doubleでキャストしているのは、clock()関数の戻り値はlong型だからです。
差分を取っただけでは、ミリ秒単位の表示になっているので、CLOCKS_PER_SECという定数で割ると秒数に直すことができます。

ミリ秒といいましたが、環境によってはミリ秒でない可能性もあるので、定数CLOCKS_PER_SECを使って差分を割るのが一番安全です。

正確に入力されているかstrcmp関数でチェック

AからZまで正確に入力されたかは、文字列同士の比較を行えば良いのでstrcmp()関数を利用します。
strcmp関数は、一致した場合0を返す関数なので

/* 正確に打てたか判定する */
if ( !( strcmp ( in, tokuuchi ) ) ) {
		:
	正確に打てた場合の処理
		:
}

としていますが

if ( strcmp ( in, tokuuchi ) == 0 ) {
		:
	正確に打てた場合の処理
		:
}

としても意味は同じです。

ソースコード全体

今回のソースコード全体を示します。

以上、clock関数を使ってキーボードのA~Zまでの入力速度を測るプログラムでした。

コメント

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