运行C ++循环特定时间

时间:2015-10-07 09:30:38

标签: php c++ loops time

我开始使用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;
?>

我可以稍后添加一些复杂的计算......

5 个答案:

答案 0 :(得分:1)

语言有不同的范围规则。

在C ++中,范围以结束括号结束。如果要在条件中使用变量,则其定义必须在循环范围之外。

答案 1 :(得分:0)

pref_timedurationwhile循环的范围块中定义。

因此无法在循环退出测试中使用:while( pref_timeduration < 5)无效且编译器正在告诉您。

一种解决方法是在pref_timeduration之前声明do。如果你担心将pref_timeduration的范围泄漏到函数的其他部分,你可以在整个事情上添加一对括号。

答案 2 :(得分:0)

您的问题很简单,它与变量pref_timeduration的范围有关。当您尝试在外部访问变量时,您已在循环内声明了变量。在do {} while()循环之外初始化变量并在循环内更新它。

答案 3 :(得分:0)

在do-while语句中,在评估条件之前执行正文。但是对于正常工作的内容,包括pref_timeduration的声明,条件必须是真的。 Bjarne Stroustrup建议不要使用do-while循环。

答案 4 :(得分: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();
}