LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1607|回复: 6

C语言中屏幕输出的一个问题

[复制链接]
发表于 2010-1-14 21:32:40 | 显示全部楼层 |阅读模式
我在命令行模式下编程,想让程序运行时在屏幕中能够不断显示一个变化的值,而这个值的位置是固定的。比如
显示内容为:    Time is:12:33:12
如何能够让前面的字符串不变,只有后面的时间内容会变,而且在屏幕上只输出一行内容,不会每次输出一行,重复输出Time is这样的内容。
不知道这样的效果能不能实现呢?
发表于 2010-1-15 10:11:08 | 显示全部楼层

  1. {       
  2.     char buf[1024];
  3.         int hour = 11,minute=0,second=0;
  4.         int i;
  5.         for(i=0;i<50;i++)
  6.         {
  7.                 sprintf(buf, "Time is:%02d:%02d:%02d", hour,minute,second+i);       
  8.                 printf("\r%s", buf);
  9.                 sleep(1);
  10.         }
  11.         
  12.         return 0;
  13. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-15 14:31:43 | 显示全部楼层
多谢,可以实现

不过如果我输出的内容不是时间,而是一个长度变化的内容呢?

如果我这次输出的内容长度比上次长,那会覆盖上次输出的内容,没有问题

可是如果我这次输出的内容长度比上次短,那么就不能把上次显示的内容清除,而留了一个尾巴
回复 支持 反对

使用道具 举报

发表于 2010-1-15 15:04:17 | 显示全部楼层
自己又没动手试过?
如果真像你说的那种情况出现,清空再输不就不就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-15 22:27:27 | 显示全部楼层
您的程序我试过了。
如果直接按照您的程序写,则运行时程序不能显示,只有当50秒时间到了后才一次显示最后一个时间的结果,于是我在sprintf下面加了一行fflush(stdout);命令,就能够显示了。

如果我写成第一次输出一个字符串:aaaaa
第二次输出bbbbbbbb,则第二次能够完全把第一次输出内容覆盖掉
然后我继续输出ccccc,由于本次输出的字符串长度没有第二次的长,所以会显示cccccbbb,就是第二次的内容只有部分被覆盖,用\r并不能清空内容
回复 支持 反对

使用道具 举报

发表于 2010-2-3 12:21:02 | 显示全部楼层
xt100 = > google
回复 支持 反对

使用道具 举报

发表于 2010-2-7 10:00:34 | 显示全部楼层
Post by xuyaosong;2064378
多谢,可以实现
不过如果我输出的内容不是时间,而是一个长度变化的内容呢?
如果我这次输出的内容长度比上次长,那会覆盖上次输出的内容,没有问题
可是如果我这次输出的内容长度比上次短,那么就不能把上次显示的内容清除,而留了一个尾巴


在输出的后面多加些空格即可保证插除。

当然,比较靠谱的办法是记住上一次输出的长度,然后按照上一次的长度写一遍空格,然后再写下一次的内容。或者计算两次内容的差值,并填写空格。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表