我正在尝试编写一个程序,该程序将在屏幕上非常特定的位置写入控制台。例如从第 20 列到第 39 列。
每次写入后,由于 \r
参数,该行被“重置”。这确保该行保持静态并且仅更新特定字段。
问题是,我可以指示 printf 从第 0 列写入到第 19 列而不删除该行的其余部分,但似乎我无法指示 printf 从第 20 列开始写入而不删除进程中的第 0 列到第 19 列19.
是否有(标准)方法可以做到这一点? 使用 printf 以外的东西是可能的。
[编辑] 我读到 C 语言中有一个 gotoxy() 函数,它显然适用于 Windows,并且可以在 Linux 中使用 ncurses 进行模拟。这个功能有什么问题吗?
最佳答案
您可以尝试根据需要打印尽可能多的退格键(以及用于清除旧文本的空格)来定位光标。
不保证它对你有用......如果它适用:不保证它在另一台计算机上工作:)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i, k;
time_t oldtime = time(0);
if (oldtime == (time_t)-1) {
fprintf(stderr, "time function does not work on this machine\n");
exit(EXIT_FAILURE);
}
while (time(0) == oldtime) /* void */;
printf("fixed stuff: ");
for (i = 1; i < 6; i++) {
int val = pow(10, i) * i;
printf("%d", val);
fflush(stdout);
oldtime = time(0);
while (time(0) == oldtime) /* void */;
if (i < 5) {
for (k = 0; k < i + 1; k++) printf("\b \b"); // go back; erase; go back again
fflush(stdout);
} else {
puts("");
}
}
return 0;
}
它对我来说适用于 Linux 和 Windows 计算机
关于c - 使用 printf 跳过字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052540/