(七十三)延迟循环、时钟单位、clock()

来源:互联网 发布:aa租车 摇到号 知乎 编辑:程序博客网 时间:2024/05/17 10:05

在(七十二)中说过,使用判断语句的时候,在小括号()后,大括号{}前一般禁止加入分号。原因在于,空语句一般会无法进行循环更新,因此可能导致无限循环。

 

然而,假如一个变量即使不进行循环更新,他也会改变自己,那么这样就可以利用空语句,来起到延迟的作用。

 

如代码:


//延迟循环#include<iostream>#include<ctime>int main(){using namespace std;int yc;//定义int类型变量yc——延迟cout << "这里有两段话,显示你想让两段话输出的间隔时间:";cin >> yc;clock_tdelay = yc*CLOCKS_PER_SEC;//clock_t是一种类型(他是int的别名,但更理解),用于储存时钟类型变量。此外,还增强可移植性。//CLOCKS_PER_SEC是一个常数,他用于储存一秒钟有多少个时钟单位,可以简化理解为1秒,但实际上,他并不是这样。//比如时钟单位一秒跳1000下,那么他实际上是1000,跳10000下,就是1w。在不同电脑上,由于系统的不同,结果可能不同。//所以这行语句的意思,是定义时间变量delay,他等于用户输入的数字乘以这个单位,就是x秒*若干时钟单位/秒clock_t ks = clock();//clock()实际上就是当前的时钟时间,将当前时间赋值给时钟类型变量ks。//而ks-clock()实际上就是两个时间之间的时钟单位数量。cout << "这里是第一段话,你猜第二段话是什么?" << endl;while (clock() - ks < delay)//由于clock()随着时钟的变化而变化,而ks是由开始赋值的,因此他们的差会随着时间的推移而增大。当差大于等于delay的时候,循环结束,也就达到了我们想要等待时间的目的//这里是空语句,执行空语句是无输出的,用于等待时间,不满足条件后,结束执行空语句。;cout << "这里是第二段话,我最帅!" << endl;system("pause");return 0;}

输出:


这里有两段话,显示你想让两段话输出的间隔时间:3这里是第一段话,你猜第二段话是什么?这里是第二段话,我最帅!请按任意键继续. . .

总结:

①clock()是随着时间的推进而增大的——不然他无法和ks相减

具体clock()表示什么,下面将研究。

 

②clock_t是int的别名,相比int,更易理解。(据说也增强可移植性)

 

③CLOCKS_PER_SEC的意思是,一秒钟,有多少个时钟单位。经测试,在我的电脑上是1000,也就是说,他实际上=1000。但写成这样,可以在不同电脑上都通用,因为有的电脑或者有的系统上,他的值并不等于1000。

因为他等于1000,所以clock()每秒增加1000,具体看下面的代码。

 

④因为clock()随着时间的增加而增加,ks在声明并初始化的时候确定,因此他们的差是随着时间推移而增大的。

具体的来说,是初始为0,每过1秒增加1000(在我的电脑上),而delay是用户输入的描述乘以1000,

因此,两边都除以1000,就相当于左边每秒增加1(秒)右边是用户输入的秒数(int类型)。起到一个延迟时间的作用。

 

⑤使用clock()和CLOCKS_PER_SEC需要使用头文件<ctime>

 

 

clock()的实质:

clock()在程序初始执行的时候,值应该为0(推测),随着程序的执行,每秒增加1000。

如代码:

//测试clock()的意义#include<iostream>#include<ctime>int main(){using namespace std;int a = clock();//int a被声明为当前clock()的值,注:也可以用clock_t来做变量名cout << clock() << endl;//输出当前clock()的值cout << a << endl;//输出a的值for (int yc = 1;yc < 4;yc++)//初始yc为1,每次循环yc+1,当yc>=4时,停止执行循环//作用是,让每次执行循环的时候,时间间隔都不一样{clock_tdelay = yc*CLOCKS_PER_SEC;//变量yc为yc(秒)clock_t ks = clock();//ks变量为当前时钟单位while (clock() - ks < delay);//循环执行空代码以起到延迟作用,当延迟时间满足条件后,结束循环cout << clock() << endl;//输出循环结束后的clock()值}cout << CLOCKS_PER_SEC << endl;//输出CLOCKS_PER_SEC的值system("pause");return 0;}

输出:


1031031104310461041000请按任意键继续. . .

总结:

①我们可以发现,clock()的值,随着时间增加而增加,至于具体增加数字,可以认为,每秒增加1000。

 

CLOCKS_PER_SEC的值为1000——猜测,这个值和clock()每秒增加的值是相同的

 

③猜测:clock()的值,初始应该为0。

 

④每秒输出一个代码的延迟循环,如代码:

//每秒输出一行代码,连续10秒#include<iostream>#include<ctime>int main(){using namespace std;cout << "当前时间为" << clock()<< endl;//以下是核心部分clock_t one = CLOCKS_PER_SEC;//变量one=1秒。clock_t one_start;//声明变量one_start,用于在开始的时候给其赋值for (int i = 0;i < 10;i++){one_start = clock();//当前时间为clock()while (clock() - one_start < one)//时间过去了一秒;cout << "等待中,这是第" << i + 1 << "秒...\n";//注:之所以i+1,是因为已经等待了1秒}//以上是核心部分cout << "当前时间为" << clock()<< endl;system("pause");return 0;}

输出:


当前时间为105等待中,这是第1秒...等待中,这是第2秒...等待中,这是第3秒...等待中,这是第4秒...等待中,这是第5秒...等待中,这是第6秒...等待中,这是第7秒...等待中,这是第8秒...等待中,这是第9秒...等待中,这是第10秒...当前时间为10110请按任意键继续. . .

总结:

①等1秒输出一行代码的核心为:

声明部分:

clock_t one = CLOCKS_PER_SEC;//变量one=1秒。

clock_t one_start; //声明变量one_start,用于在开始的时候给其赋值

执行等待部分:

while (clock() - one_start < one); //时间过去了一

即声明一次之后,使用 执行等待部分,即自动等待一秒。

多次等待:

加for(i=0;i<n;i++) 效果是等待n秒。

 


0 0
原创粉丝点击