关于打印的问题:显示值反映变化
Question about printing: displaying value reflecting change
我有一些关于在 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("%d\r", count);
fflush(stdout);
}
}
for (int i=count;i>=0 ; i--)
{
printf ("YOUR TIME : %02d\r", i);
fflush(stdout);
sleep(1);
}
这是我的主要代码的一部分。我设计的是接收按钮输入并相应地改变计数的值。我想要做的是在一行中显示 count
的值,连续反映 count
.
的变化
我的意思是,如果现在的情况是
结果window
2
如果我给 Button = 1,我希望结果是
结果window
3
没有
结果window
2
3
所以我找到了一些代码来执行此操作但是当计数超过 10 并且 return 回到一位数字 (0~9) 时,
结果显示
10 到 90,不是 09。也不是 08,而是 80。我该如何处理?
如果输出终端支持它们,则可以使用所提供的 ANSI 转义序列 here。例如:
- 从光标位置擦除行: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("3[%dD3[K", 2);
} while(1);
return 0;
}
您可以用 spaces 覆盖剩余部分,如下所示:
printf("YOUR TIME : %d \r", i);
你看到 %d
和 \r
之间的 space 字符了吗?
一些注意事项:
- 您已经有
%02d
,但这与您描述的错误输出不符。
- 我会把
\r
放在格式字符串的开头,因为这对我来说更合乎逻辑。
- 如果在循环结束后输出将被另一个文本覆盖,我会保留
\r
现在的位置,并且 printf("FINISHED \n");
或 puts("FINISHED ");
有足够的 spaces.
我有一些关于在 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("%d\r", count);
fflush(stdout);
}
}
for (int i=count;i>=0 ; i--)
{
printf ("YOUR TIME : %02d\r", i);
fflush(stdout);
sleep(1);
}
这是我的主要代码的一部分。我设计的是接收按钮输入并相应地改变计数的值。我想要做的是在一行中显示 count
的值,连续反映 count
.
我的意思是,如果现在的情况是
结果window
2
如果我给 Button = 1,我希望结果是
结果window
3
没有
结果window
2
3
所以我找到了一些代码来执行此操作但是当计数超过 10 并且 return 回到一位数字 (0~9) 时, 结果显示
10 到 90,不是 09。也不是 08,而是 80。我该如何处理?
如果输出终端支持它们,则可以使用所提供的 ANSI 转义序列 here。例如:
- 从光标位置擦除行: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("3[%dD3[K", 2);
} while(1);
return 0;
}
您可以用 spaces 覆盖剩余部分,如下所示:
printf("YOUR TIME : %d \r", i);
你看到 %d
和 \r
之间的 space 字符了吗?
一些注意事项:
- 您已经有
%02d
,但这与您描述的错误输出不符。 - 我会把
\r
放在格式字符串的开头,因为这对我来说更合乎逻辑。 - 如果在循环结束后输出将被另一个文本覆盖,我会保留
\r
现在的位置,并且printf("FINISHED \n");
或puts("FINISHED ");
有足够的 spaces.