2012-03-21 47 views
0

爲什麼這段代碼不是一次打印「新時間」? 是否有可能修復,而無需在循環外調用clock()?在while語句中將舊變量值與新值進行比較?

#include <stdio.h> 
#include <time.h> 
int main(char argv[], int argc) 
{ 
    double lastTime = 0; 
    while(1) 
    { 
     printf("New time:\n"); 
     while(lastTime == (lastTime = (double)clock()/(double)CLOCKS_PER_SEC)) 
     { 
      printf("%f\n", lastTime); 
     } 
    } 
    return 0; 
} 

回答

0

這條線將無法正常工作,你可能希望(我已經添加了右括號原因,他們上述失蹤):

while(lastTime == (lastTime = (double)clock()/(double)CLOCKS_PER_S)) 

由於支架比較的右側(轉讓)首先計算,基本上是導致此:

while(lastTime == lastTime) 

基本上導致while(0 == 0),這顯然是while(true)

您將需要至少第二個變量來保存以前的值。然後在lastTime == 0(即第一次運行循環)時添加額外的情況。


此外,如在評論上面提到的,你不應該因爲它不是那麼容易比較值的兩個雙值完全相同(尤指計算時)。

如果你想要做一些動作每隔X毫秒(或其他任何時間),你應該用一個計數器加起來經過的時間:

for(clock_t timeSkipped = 0, lastTick = clock() ; ; timeSkipped += clock() - lastTick, lastTick = clock()) { 
    while(timeSkipped > 0.5 * CLOCKS_PER_S) { // example: this will run the content of this loop at a fixed time step of once every half second 
     timeSkipped -= 0.5 * CLOCKS_PER_S; 
     printf("Tick!"); 
    } 

}

4

您的代碼似乎已被切斷。但是你的問題是這個邏輯:

while (lastTime == (lastTime = something)) 

測試將永遠是真實的;你爲lastTime指定一些值,然後將其與自身進行比較。

+2

也等於運算符( ==)在雙重不是一個好主意。 – keety 2012-03-21 16:42:51

+0

我希望將舊值與新值進行比較,同時將新值分配給lastTime – Tyilo 2012-03-21 16:47:29

相關問題