我对在C上打印有一些问题。这是我的代码。
while(1)
{
if(Button == 32)
{
break;
}
else
{
if(Button == 1)
count += 1;
if(btn_value == 2)
count -= 1;
if(btn_value == 4)
count = 0;
printf("%dr", count);
fflush(stdout);
}
}
for (int i=count;i>=0 ; i--)
{
printf ("YOUR TIME : %02dr", i);
fflush(stdout);
sleep(1);
}
这是我的主要代码的一部分。我设计的是接收按钮输入并相应地更改计数的值。我想做的是在一行中显示count
的值,该值连续反映count
的变化。
我的意思是,如果目前的情况是
结果窗口
2
如果我给Button=1,我希望结果是
结果窗口
3
不是
结果窗口
2
3
所以我找到了一些代码来做这件事,但当计数超过10并返回到一位数(0~9(时,结果显示
10到90,而不是09。也不是08而是80。我该如何处理?
您可以用空格覆盖剩余部分,如下所示:
printf("YOUR TIME : %d r", i);
你看到%d
和r
之间的空格字符了吗?
一些注意事项:
- 您已经有了
%02d
,但这与您对错误输出的描述不匹配 - 我会把
r
放在格式字符串的开头,因为它对我来说似乎更合乎逻辑 - 如果循环结束后,输出将被另一个文本覆盖,我会将
r
保留在现在的位置,并将printf("FINISHED n");
或puts("FINISHED ");
保留足够的空间
如果输出终端支持它们,则可以使用此处所示的ANSI转义序列。例如:
- 要从光标位置删除行:ESC[K
- 要使光标向后移动N列:ESC[ND
下面是一个小示例程序,每隔几秒钟在同一位置显示一个从0到19的计数器:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int count = 0;
do {
printf("%d", count);
fflush(stdout);
sleep(1);
count = (count + 1) % 20;
// Go 2 columns backward + Erase the line
// (033 is the octal ASCII code of ESC)
printf("