user-0 提问: 在网上找了一个关于移动笑脸的代码，哪位懂得帮忙解答一下，谢谢

回复:
user: user-1
content: 引用 2 楼 qq_36289732 的回复:[quote=引用 1 楼 hou09tian 的回复:] 运行了一下代码，产生如下效果  这个程序的主要功能是根据不同的时间输出数量不同的空格，即随着程序运行时间的增大，输出空格的数量也在增加。  	char a[50];// 定义数组a，该数组即为输出的“口口口口” 	int flag,i=0; 	double time,k,temp=0; 	memset(a,1,sizeof(a));//将数组a中的元素都设置为1，在此后将元素看作字符串来输出时，都是“口口口口” 	a[19]='\0';//将数组的第20个元素设置为'\0'，也就是说，之后的输出中，只输出a数组中的19个元素， 	while(1)//循环输出 	{ 		//以下3行代码得到k的值，该值为程序从运行到调用clock()函数之间所消耗的时间 		time=(double)clock()/CLOCKS_PER_SEC;//CLOCKS_PER_SEC的值是1000 		flag=(int)(time*100); 		k=flag/10; 		if(temp!=k)//temp与k进行比较的作用是为了保证如果while(1)两次循环中间的间隔时间较小时，不输出 		{ 			//输出空格，while(1)每循环一次，i的值加1 			//这样输出的空格随着程序运行时间的增多而增多 			for(flag=0;flag<i;flag++) 				printf(" "); 			printf("%s\r",a);//输出a中19个元素，此时按字符串格式输出，所以输出都是“口口口口” 			i++;//每次循环i都要加1 			//将temp赋值为上一次循环时k的值，之后在下一次循环中，将两次循环时k的值进行比较，如果两次循环 			//间隔较小，则不输出 			temp=k; 		} 		if(i==62)//循环62次，也就是输出62次之后，程序退出 			break; 	}   我有在网上查了一下，clock()/CLOCKS_PER_SEC是返回当前进程的运行时间（以秒为单位），我不太明白 time=(double)clock()/CLOCKS_PER_SEC; flag=(int)(time*100); k=flag/10;  这三句代码是怎么确定多少秒之后执行输出的    问一下，在编程里，是不是如果某个值非常小，就会很当作0 比如上面的代码，k为消耗时间，如果k过小，就会被识别为0，就是这条判断语句  if(temp!=k)[/quote] clock()函数返回值应该是从程序运行到调用clock()函数时的间隔时间，单位是毫秒；而CLOCKS_PER_SEC的定义是1000 所以clock()/CLOCKS_PER_SEC表示从程序运行到调用clock()函数的间隔时间，单位是秒；后面两个乘以100和除以10的处理，我个人觉得就是为了获得一个表示时间的变量，之后对两次返回的时间变量进行比较，如果间隔时间很小，则不输出

user: user-2
content: system("chcp 437");

user: user-0
content: 引用 1 楼 hou09tian 的回复:运行了一下代码，产生如下效果  这个程序的主要功能是根据不同的时间输出数量不同的空格，即随着程序运行时间的增大，输出空格的数量也在增加。  	char a[50];// 定义数组a，该数组即为输出的“口口口口” 	int flag,i=0; 	double time,k,temp=0; 	memset(a,1,sizeof(a));//将数组a中的元素都设置为1，在此后将元素看作字符串来输出时，都是“口口口口” 	a[19]='\0';//将数组的第20个元素设置为'\0'，也就是说，之后的输出中，只输出a数组中的19个元素， 	while(1)//循环输出 	{ 		//以下3行代码得到k的值，该值为程序从运行到调用clock()函数之间所消耗的时间 		time=(double)clock()/CLOCKS_PER_SEC;//CLOCKS_PER_SEC的值是1000 		flag=(int)(time*100); 		k=flag/10; 		if(temp!=k)//temp与k进行比较的作用是为了保证如果while(1)两次循环中间的间隔时间较小时，不输出 		{ 			//输出空格，while(1)每循环一次，i的值加1 			//这样输出的空格随着程序运行时间的增多而增多 			for(flag=0;flag<i;flag++) 				printf(" "); 			printf("%s\r",a);//输出a中19个元素，此时按字符串格式输出，所以输出都是“口口口口” 			i++;//每次循环i都要加1 			//将temp赋值为上一次循环时k的值，之后在下一次循环中，将两次循环时k的值进行比较，如果两次循环 			//间隔较小，则不输出 			temp=k; 		} 		if(i==62)//循环62次，也就是输出62次之后，程序退出 			break; 	}   我有在网上查了一下，clock()/CLOCKS_PER_SEC是返回当前进程的运行时间（以秒为单位），我不太明白 time=(double)clock()/CLOCKS_PER_SEC; flag=(int)(time*100); k=flag/10;  这三句代码是怎么确定多少秒之后执行输出的    问一下，在编程里，是不是如果某个值非常小，就会很当作0 比如上面的代码，k为消耗时间，如果k过小，就会被识别为0，就是这条判断语句  if(temp!=k)

user: user-1
content: 运行了一下代码，产生如下效果  这个程序的主要功能是根据不同的时间输出数量不同的空格，即随着程序运行时间的增大，输出空格的数量也在增加。  	char a[50];// 定义数组a，该数组即为输出的“口口口口” 	int flag,i=0; 	double time,k,temp=0; 	memset(a,1,sizeof(a));//将数组a中的元素都设置为1，在此后将元素看作字符串来输出时，都是“口口口口” 	a[19]='\0';//将数组的第20个元素设置为'\0'，也就是说，之后的输出中，只输出a数组中的19个元素， 	while(1)//循环输出 	{ 		//以下3行代码得到k的值，该值为程序从运行到调用clock()函数之间所消耗的时间 		time=(double)clock()/CLOCKS_PER_SEC;//CLOCKS_PER_SEC的值是1000 		flag=(int)(time*100); 		k=flag/10; 		if(temp!=k)//temp与k进行比较的作用是为了保证如果while(1)两次循环中间的间隔时间较小时，不输出 		{ 			//输出空格，while(1)每循环一次，i的值加1 			//这样输出的空格随着程序运行时间的增多而增多 			for(flag=0;flag<i;flag++) 				printf(" "); 			printf("%s\r",a);//输出a中19个元素，此时按字符串格式输出，所以输出都是“口口口口” 			i++;//每次循环i都要加1 			//将temp赋值为上一次循环时k的值，之后在下一次循环中，将两次循环时k的值进行比较，如果两次循环 			//间隔较小，则不输出 			temp=k; 		} 		if(i==62)//循环62次，也就是输出62次之后，程序退出 			break; 	}