- ベストアンサー
秒数を数える(C言語)
プログラム実行時に時間を数え始めて、100秒経過したらまた最初からプログラムを実行しようと考えています。(tcpdumpみたいなもの) まず、秒数を数えて出力するプログラムを作ってみたのですが、実行しても0.000000と出てしまい、数えることが出来ませんでした。 (例) #include<stdio.h> #include<time.h> void tekitou(); int main() { while(1) { /*無限ループ*/ tekitou(); } return 0; } void tekitou() { static time_t start; time_t last; start = clock(); last = clock(); printf("%f\n", (double)(last - start)/CLOCKS_PER_SEC); } OSはLinuxでコンパイラはgccです。よろしくおねがいします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> time_t last; > start = clock(); の部分を < time_t last; < static int first=1; < if (first) { < start = clock(); < first=0; < } のようにしてみましょう。 これによって初めてtekitouを呼び出したときにだけstartが更新されるようになります。
その他の回答 (3)
- nikolaschka
- ベストアンサー率28% (15/52)
No.1です。 エラーになってしまったようで、失礼いたしました。 (1) No.3の方のように、フラグを用いてみる。 (2) while(1)の前でclock()を求め、tekitou()の中ではその値を用いる。 (3) tekitou()の中でループさせて、そのループの前で「start = clock();」を実行する などの対処法は如何でしょうか。
お礼
上記の対処方を試したところ、上手く時間を表示できました。やはり、時間が早く表示されてしまいましたが…。 そこはもうちょっと調べて、解決したいとおもいます。ありがとうございました。
- butarou
- ベストアンサー率24% (7/29)
>start = clock(); >last = clock(); startとlastの間が短すぎて、差が0なんだとおもいます。 間に何かの処理を入れてみてはどうでしょうか。 (waitや、適当なファイルのOpen/Closeなど)
補足
回答ありがとうございます。無限ループなので、staticでstartを固定してやれば、差が出て来ると思ったのですが… むりなんでしょうか?
- nikolaschka
- ベストアンサー率28% (15/52)
tekitou()の中にある、 start = clock(); でstartが上書きされるからではないでしょうか。 startの宣言を static time_t start = clock(); に変えてstartへの代入を削除したら如何でしょうか。
補足
さっそくの回答ありがとうございます。 試してみたのですが、コンパイル時に「初期化子の要素が定数ではありません」とエラーが出てしまいました。
お礼
回答ありがとうございます。直してやってみたところ、ちゃんと時間を計測できました。ただ、なぜか時間が4倍ぐらいの早さで表示されてしまいましたが…