【问题标题】:Run C++ loop for a specific time在特定时间运行 C++ 循环
【发布时间】:2015-10-07 09:30:37
【问题描述】:

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

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

【问题讨论】:

  • 问题本身与php无关。
  • 它被自动添加到PHP类别中。

标签: c++ loops time


【解决方案1】:

语言有不同的范围规则。

在 C++ 中,范围以右括号结束。如果你想在条件中使用变量,它的定义必须在循环范围之外。

【讨论】:

    【解决方案2】:

    pref_timedurationwhile 循环的范围块内定义。

    因此不能在循环退出测试中使用:while( pref_timeduration &lt; 5) 无效,您的编译器会告诉您这一点。

    一种解决方法是在 do 之前声明 pref_timeduration。如果您担心将pref_timeduration 的范围泄漏到函数的其他部分,您可以在整个东西周围加上一对额外的大括号。

    【讨论】:

      【解决方案3】:

      你的问题很简单,和变量pref_timeduration的作用域有关。当您尝试在外部访问它时,您已经在循环内声明了该变量。在do {} while() 循环外初始化变量并在循环内更新它。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-25
          • 1970-01-01
          相关资源
          最近更新 更多