1

時間に基づいてループ関数を作成しようとしています。反復後、60秒ごとに「60秒経過」と出力されます。しかし、このコードは「60秒経過」のカップルになりますが、実際には時計はまだ1分も表示されていません。以下を試しましたが、この情報が表示されることを期待していますが、表示されません(最初のカップルのみ)反復の行の。その後ではない..)

誰かがこの問題で助けることができますか?ありがとうございました

#include <stdio.h>
#include <time.h>

int main()
{
time_t start,stop;
start = time(NULL);
time(&start);
int iteration, i;
    for (iteration = 1; iteration <= 500; iteration++) {
            for (i = 0; i <= 50; i++) {
                     printf("looping while waiting 60 second..\n");

             }
            stop = time(NULL);
            int diff = difftime(start, stop);
            if (diff % 60 == 0) {
                     printf("60 second passed..");}
            }

    return 1;
}
4

2 に答える 2

3

difftime次のコードは、1秒が経過する前に複数回実行される可能性があります。その結果、difftimeは値<1を返します。これは、暗黙のキャストによって0に切り捨てられます。そしてもちろん0 % 60 == 0

編集:

あなたは次のようなことを考えるかもしれません:

start = time(NULL);
for(; /* some condition that takes forever to meet */;) {
    // do stuff that apparently takes forever.
    stop = time(NULL);
    double diff = difftime(stop, start);
    if (diff >= 60) {
        printf("60 seconds passed...");
        start = time(NULL);
    }
}

また、サンプルコードでは、への呼び出しで反転する必要があることに注意しstartstopくださいdifftime

于 2012-04-04T17:02:23.973 に答える
2

difftime が 0 に等しい可能性が非常に高いです。60 秒間待ちたい場合は、関数の使用を検討する必要があります。

  • usleepLinux で
  • sleepWindows 上
于 2012-04-04T17:09:06.797 に答える