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までの入力速度を測るプログラムでした。

コメント