2016-10-03 75 views
0

我想連續輪詢打勾的時鐘週期數,並僅在週期數爲100 +開始時間時打印我的語句。這樣,如果我做起= 1000000,打印語句應執行只有在結束= 1000100 ,它應該表現出如假設在啓動時,時間= 1000000 你好,開始的價值:1000000和值結束:1000101輪詢C中的時鐘週期數w

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

void main() 
{ 
     clock_t start,end; 
     start = clock(); 
     while(end=clock() < (start + 100)) 
     {}; 
     printf("Hello, value of start:%d and value of end:%d", start, end); 
} 

不過我正在 您好,開始的值:0和最終的價值:0

我已經編輯我的代碼和最終的獲得價值= 0.0000。這就是我下面

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

void main() 
{ 
     clock_t start; 
     start = clock(); 
     clock_t end = start; 
     printf("Hello"); 
     while(end < (start + 100)) 
     { 
       end = clock(); 
     }; 
     printf("value of end is %f \n", end); 
} 

回答

1

編輯的代碼,我敢肯定,這條線:

while(end=clock()< start + 100) 

需求是這樣的:

while((end=clock()) < (start + 100)) 

寫更好:

void main() 
{ 
     clock_t start = clock(); 
     clock_t end = start; 
     while(end < (start + 100)) 
     { 
      end = clock(); 
     }; 
     printf("Hello, value of start:%d and value of end:%d", (int)start, (int)end); 
} 
+0

在接着上面的Hello,開始的值:0和結束的值:-1582571616之後,我得到了這個輸出。但我waqnt結束爲100 –

+1

我懷疑clock_t是一個真正的64位類型,長或其他。更新printf語句中的格式說明符。 – selbie

1

而(端=時鐘()<啓動+ 100)

是不正確的,因爲=具有比<優先級低。

爲了精確您的語句將像這樣被解釋(注意優先順序:+然後<然後=):

while(end = (clock() < (start + 100))) 
    ; 

(clock() < (start + 100))是布爾表達式,這將是1或0;您的while循環運行,直到條件變得錯誤,這意味着(clock() < (start + 100))爲0,然後將其分配給end

所以不要猶豫,在表達式中加上額外的括號。在這種情況下,你需要的是:

while((end=clock()) < start + 100) 
    ; 
1

第一個問題是其他已表示,在優先if條件是錯誤的。第二個是clock_t不一定表示爲整數。最好的辦法是將其轉換爲double,這將在常​​見情況下提供足夠的範圍,即clock_t是64位整數,但值相對較小。