- 締切済み
C言語:計算問題を解く時間が計測できません
C言語を学び始めて1週間程度のものです。 現在柴田望洋著の明解C言語中級編という本でC言語を学んでいます。 その中のプログラミング例を真似してプログラミングしているのですが、 うまく動作しません。詳細は以下の通りです。 著書のList2-6のプログラミングです。 問題:計算問題を解く時間を計測が0.0秒になってしまう。 ここよりプログラミングです。 #include <time.h> #include <stdio.h> #include <stdlib.h> int main (void) { int a, b, c; int x; clock_t start, end; double req_time; srand(time(NULL)); a = 10 + rand() % 90; b = 10 + rand() % 90; c = 10 + rand() % 90; printf("%d + %d + %dは何ですか:", a, b, c); start = clock(); while (1) { scanf("%d", &x); if (x == a + b +c) break; printf("\a違いますよ!!\n再入力してください:"); } end = clock(); req_time = (double)(end - start) / CLOCKS_PER_SEC; printf("%.1f秒かかりました。\n", req_time); if (req_time > 30.0) printf("時間がかかりすぎです。\n"); else if (req_time > 17.0) printf("まあまあですね。\n"); else printf("素早いですね\n"); return (0); } このプログラムを実行して計算を解いて正解の答えを入力しても 0.0秒かかりました。 素早いですね。 としかでてきません。どうすればきちんと時間を計測するプログラミングができるでしょうか。 パソコンはMacbookairを使っています。 コンパイラ(?)はXcodeというものを使っていると思います(ここらへんは勉強不足でよくわかりません。) もしよければご回答お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hanabutako
- ベストアンサー率54% (492/895)
そりゃ、そのコードが悪いですね。 clock関数のマニュアルにはこう書いてあります。 http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/clock.3.html | The clock() function determines the amount of processor time used since | the invocation of the calling process, measured in CLOCKS_PER_SECs of a | second. つまり、Mac OS XのようなマルチタスクOSではひとつのプログラムが実行している間ずっとCPUを占有することはありえないので、使ったプロセッサーの時間となるとほとんど0なのではないでしょうか。 ミリ秒まで計測したいとしたら、gettimeofdayやclock_gettimeを使い、そうでないならtimeを使って時間を測ることをおすすめします。 http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man2/gettimeofday.2.html http://developer.apple.com/library/ios/#documentation/System/Conceptual/ManPages_iPhoneOS/man3/time.3.html 例えば、gettimeofdayだとこんな感じです。 #include <sys/time.h> #include <stdio.h> #include <stdlib.h> int main (void) { int a, b, c; int x; struct timeval start, end; double req_time; srand(time(NULL)); a = 10 + rand() % 90; b = 10 + rand() % 90; c = 10 + rand() % 90; printf("%d + %d + %dは何ですか:", a, b, c); gettimeofday(&start, NULL); while (1) { scanf("%d", &x); if (x == a + b +c) break; printf("\a違いますよ!!\n再入力してください:"); } gettimeofday(&end, NULL); req_time = (double)(end.tv_sec - start.tv_sec) + (double)(end.tv_usec - start.tv_usec) / 1000 / 1000; printf("%.1f秒かかりました。\n", req_time); if (req_time > 30.0) printf("時間がかかりすぎです。\n"); else if (req_time > 17.0) printf("まあまあですね。\n"); else printf("素早いですね\n"); return (0); }