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

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

 

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

 

如代码:


//延迟循环
#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秒。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值