C言語のclock()関数は、実行した際のCPU時間を返してくれます。
このclock関数で得られたCPU時間の差分を使ってキーボードのA~Zまでの入力速度を計測してみようと思います。
今回利用する主な関数は以下の通りです。
関数名 | 機能 | 必要なヘッダファイル |
---|---|---|
clock() | CPU時間を返す | time.h |
strcmp() | 文字列の一致をチェック | string.h |
clock()関数の基本的な解説は以下を参考にしてください。
C言語:clock関数を使ってある処理にかかった時間を計測する
C言語のclock()関数を使うとある処理に掛かる時間計測が可能です。
この記事では、サンプルプログラムを使ってclock関数の利用例を示します。
実行イメージ
キーボード入力中の画面(Enterキーを押すと計測開始です)
キー入力ミスがあった場合(ひどい言葉が投げつけられます)
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までの入力速度を測るプログラムでした。
コメント