我开始使用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 :(得分:1)
语言有不同的范围规则。
在C ++中,范围以结束括号结束。如果要在条件中使用变量,则其定义必须在循环范围之外。
答案 1 :(得分:0)
pref_timeduration
在while
循环的范围块中定义。
因此无法在循环退出测试中使用: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();
}