免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5536 | 回复: 9
打印 上一主题 下一主题

如何做倒计时 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-16 20:33 |只看该作者 |倒序浏览
我想做个倒计时的脚本,如 10 9 8 7 6 。。。在同一个位置,每次减一,但是如何把原来的位置打印的数字覆盖呢,我用 print "$count";sleep(1);print "\e",或者\b,然后用while或者for循环都不行,无法把本来的数字覆盖循环变化,我该如何做呢?请各位大大指教下。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2007-08-17 07:05 |只看该作者
Windows 下用 Win32::Console
Linux/Unix 下用 Curses

论坛徽章:
0
3 [报告]
发表于 2007-08-17 13:30 |只看该作者
刚调试了一个,在同一位置倒计时,但是倒计时位数不能超过3位数
  1. local $|=1;
  2. for($i=99;$i>0;$i--){
  3.         sleep 1;
  4.         #print "\t";
  5.   if ($i/10<1){
  6.           print "0";
  7.           print $i;
  8.           print "\b\b";
  9.           }
  10.   else {
  11.          
  12.         print $i;
  13.         print "\b\b";
  14.         }       
  15. }
复制代码

[ 本帖最后由 打靶归来 于 2007-8-17 13:31 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-08-17 13:50 |只看该作者
  1. D:\>perl -e "$|++;for (1..100) {$c=100-$_;sleep 1;print \"\r$c\";}"
复制代码

论坛徽章:
0
5 [报告]
发表于 2007-08-17 16:02 |只看该作者

  1. for i in 9 8 7 6 5 4 3 2 1; do echo -ne "\b$i"; sleep 1; done
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-08-17 16:28 |只看该作者
谢谢各位大大,真是超强!!

论坛徽章:
0
7 [报告]
发表于 2007-08-17 17:28 |只看该作者
原帖由 dajun 于 2007-8-17 13:50 发表
D:\>perl -e "$|++;for (1..100) {$c=100-$_;sleep 1;print \"\r$c\";}"

没有一个清空的过程.当从10变成9时会显示90

顺便问一下$|++是做什么的啊?

[ 本帖最后由 mingjwan 于 2007-8-17 17:31 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-08-17 21:05 |只看该作者
原帖由 mingjwan 于 2007-8-17 17:28 发表

没有一个清空的过程.当从10变成9时会显示90

顺便问一下$|++是做什么的啊?


$|默认为0  $|++为+1,所以$|就为1了。

论坛徽章:
0
9 [报告]
发表于 2007-08-17 21:16 |只看该作者
原帖由 mingjwan 于 2007-8-17 17:28 发表

没有一个清空的过程.当从10变成9时会显示90

顺便问一下$|++是做什么的啊?



的确有点问题:


  1. perl -e '$|++; for (1..20) {$c=20-$_;sleep 1;printf "\r%3d", $c}; print "\n"'
复制代码

这样就可以了

$| 不为0时,关闭缓冲, 不然print(f)没有"\n"会缓冲。 不是实时的显示。

论坛徽章:
0
10 [报告]
发表于 2007-08-20 19:07 |只看该作者
perl -e "$|++;for (1..100) {$c=100-$_;sleep 1;print \"\r$c\";}"    出现到10跳到90,是不是因为$|刷新的是当前行输出的位置,对于比前一个输出少一位的,譬如10变成9,后面这个0没有刷掉,为了验证这个,我特意加了个一开始输出,perl -e "$|++;print  \""cccccc"\r\";for (1..100) {$c=100-$_;sleep 1;print \"$c\r\";}" 然后后面显示的ccc没有被刷掉。对于这些perl的特殊变量,我在网上找了些资料,看的很迷糊,有没有简单点的入门呀。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP