C 关于打印的问题:显示反映更改的值
我有一些关于在C上打印的问题。这是我的代码C 关于打印的问题:显示反映更改的值,c,formatting,cursor-position,C,Formatting,Cursor Position,我有一些关于在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;
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
的变化
我是说,如果目前的情况是
结果窗口
2
3
2
3
若我给Button=1,我希望结果是
结果窗口
2
3
2
3
不是
结果窗口
2
3
2
3
所以我找到了一些代码来实现这一点,但当计数超过10并返回到一位数(0~9)时,
结果表明
10到90,而不是09。也不是08而是80。如何处理此问题?如果输出终端支持它们,则可以使用所示的ANSI转义序列。例如:
- 要从光标位置删除该行,请执行以下操作:ESC[K]
- 要使光标向后移动N列:ESC[ND
#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("\033[%dD\033[K", 2);
} while(1);
return 0;
}
#包括
#包括
内部主(空)
{
整数计数=0;
做{
printf(“%d”,计数);
fflush(stdout);
睡眠(1);
计数=(计数+1)%20;
//向后移动两列并删除该行
//(033是ESC的八进制ASCII码)
printf(“\033[%dD\033[K],2);
}而(1),;
返回0;
}
如果输出终端支持它们,则可以使用所示的ANSI转义序列。例如:
- 要从光标位置删除该行,请执行以下操作:ESC[K]
- 要使光标向后移动N列:ESC[ND
#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("\033[%dD\033[K", 2);
} while(1);
return 0;
}
#包括
#包括
内部主(空)
{
整数计数=0;
做{
printf(“%d”,计数);
fflush(stdout);
睡眠(1);
计数=(计数+1)%20;
//向后移动两列并删除该行
//(033是ESC的八进制ASCII码)
printf(“\033[%dD\033[K],2);
}而(1),;
返回0;
}
您可以用空格覆盖剩菜,如下所示:
printf("YOUR TIME : %d \r", i);
您是否看到%d
和\r
之间的空格字符
一些注意事项:
- 您已经有
,但这与您对错误输出的描述不匹配%02d
- 我会将
放在格式字符串的开头,因为我觉得这更符合逻辑\r
- 如果在循环完成后,输出将被另一个文本覆盖,我会将
保留在现在的位置,并且\r
或printf(“finished\n”);
保留足够的空间put(“finished”);
printf("YOUR TIME : %d \r", i);
您是否看到%d
和\r
之间的空格字符
一些注意事项:
- 您已经有
,但这与您对错误输出的描述不匹配%02d
- 我会将
放在格式字符串的开头,因为我觉得这更符合逻辑\r
- 如果在循环完成后,输出将被另一个文本覆盖,我会将
保留在现在的位置,并且\r
或printf(“finished\n”);
保留足够的空间put(“finished”);
printf(“%d\r”,count);
=>printf(“%02d\r”,count);
。02
意味着格式化最小字段宽度为2个字符,并在左侧填充0
而不是空格。这将覆盖以前的2个字符输出。printf(%-8d\r,count);
将使用系统(“cls”)在打印count之前,您需要做什么?@VisakhVijayan:system()非常繁重,因为它会启动一个shell来执行请求的命令。因此,屏幕上的每次更改都会启动至少两个子进程。这是不合理的。printf(“%d\r”,count);
=>printf(“%02d\r”,count)。02
意味着格式化最小2个字符的字段宽度,并用0
代替空格。这将覆盖以前的2个字符输出。printf(“%-8d\r”,count);
在打印计数之前使用系统(“cls”)对您有效吗?@VisakhVijayan:system()因为它会启动一个shell来执行请求的命令,所以在屏幕上的每次更改都会启动至少两个子进程。这是不合理的。