2015-10-07 132 views
0

我開始使用C++,並決定爲練習做一些隨機編碼。所以,我想製作一個簡單的基準測試程序的,這裏有多遠,我已經得到了:在特定時間運行C++循環

#include <iostream> 
#include <ctime> 

using namespace std; 

int main(){ 
    cout << "press any key to start benchmarking" << endl; 
    cin.get(); 

    int pref_scorecounter = 0; 
    time_t pref_timestart = time(0); 
    do{ 
     pref_scorecounter++; 
     time_t pref_timefinish = time(0); 
     int pref_timeduration = pref_timefinish - pref_timestart; 
     } while(pref_timeduration < 5); 
    cout << "Score: " << pref_scorecounter; 
    cin.get(); 
} 

它的工作方式是,它顯示了多少次瞭如何具有環路發生在5秒。但我得到這個錯誤:

error: 'pref_timeduration' was not declared in this scope 

任何想法爲什麼循環中定義的變量不起作用?此外,爲什麼這個程序不能在100%的CPU運行?

該項目是從一個PHP項目,我前一陣子做移植和PHP代碼的工作100%,我用不同的服務器測試等

<?php 
$pref_scorecounter = 0; 
$pref_timestart = microtime(true); 
do { 
    $pref_scorecounter++; 
    $pref_timefinish = microtime(true); 
    $pref_timeduration = $pref_timefinish - $pref_timestart; 
} while($pref_timeduration < 5); 
echo "Score: " . $pref_scorecounter; 
?> 

我可以在以後雖然增加一些複雜的計算..

+0

該問題本身與php無關。 – Epodax

+0

它被自動添加到PHP類別中。 – Kyuunex

回答

0

所以我最終這樣做,並完成我的程序是這樣的。這不是完美的,但它至少循環5秒,只是我想要的。

#include <iostream> 
#include <ctime> 
#include <math.h> 
#include <cstdlib> 

using namespace std; 

int main(){ 
    cout << "press enter to start benchmarking" << endl; 
    cin.get(); 
    system("cls"); 
    int pref_timeduration = 0; 
    int pref_timefinish = 0; 
    int pref_scorecounter = 0; 
    time_t pref_timestart = time(0); 
    do{ 
     pref_scorecounter++; 
     time_t pref_timefinish = time(0); 
     int pref_timeduration = pref_timefinish - pref_timestart; 

     cout << "benchmarking..." << endl; 
     cout << pref_scorecounter << endl; 
     system("cls"); 

     if(pref_timeduration == 5){ 
      cout << "Score: " << pref_scorecounter; 
      cin.get(); 
      return 0; 
     } 
    } while(pref_timeduration < 5); 
    // cout << "Score: " << pref_scorecounter; 
    // cin.get(); 
} 
0

pref_timedurationwhile循環的範圍塊內定義。

因此它不能用於循環退出測試:while(pref_timeduration < 5)是無效的,你的編譯器告訴你這一點。

一種修復方法是在do之前聲明pref_timeduration。如果您擔心將pref_timeduration的範圍泄漏到該函數的其他部分,則可以在整個事件中添加一對額外的大括號。

0

您的問題很簡單,它與變量pref_timeduration的範圍有關。當你試圖在外面訪問時,你已經在循環中聲明瞭變量。初始化do {} while()循環以外的變量並在循環內部更新它。

1

語言有不同的範圍規則。

在C++中,範圍以結束括號結束。如果您想在條件中使用該變量,則其定義必須超出循環範圍。

0

在do-while語句中,在評估條件之前執行主體。但是爲了正確運作,包括pref_timeduration的聲明在內,該條件必須是真實的。 Bjarne Stroustrup建議不要使用do-while循環。