在(七十二)中说过,使用判断语句的时候,在小括号()后,大括号{}前一般禁止加入分号。原因在于,空语句一般会无法进行循环更新,因此可能导致无限循环。
然而,假如一个变量即使不进行循环更新,他也会改变自己,那么这样就可以利用空语句,来起到延迟的作用。
如代码:
//延迟循环
#include<iostream>
#include<ctime>
int main()
{
using namespace std;
int yc; //定义int类型变量yc——延迟
cout << "这里有两段话,显示你想让两段话输出的间隔时间:";
cin >> yc;
clock_t delay = 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_t delay = 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;
}
输出:
103
103
1104
3104
6104
1000
请按任意键继续. . .
总结:
①我们可以发现,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秒。