考虑以下代码:
#include<stdio.h>
void main()
{
char a;
printf("scan: ");
scanf("%c",&a);
printf("\b back");
}
在用户按下Enter键并使光标向下移动之后,我想将其向上移动,以便可以打印单词“ back”(覆盖)并覆盖“ scan”(扫描)。我该怎么做?
答案 0 :(得分:2)
您可以使用ANSI转义序列:\033[<N>A
,其中<N>
是您需要向上移动的行数(在这种情况下为上一行),因此代码如下:
#include<stdio.h>
main(void) {
char a;
printf("scan: ");
scanf("%c",&a);
printf("%c[1A back", 033);
}
此外,您不应将main声明为void
。请注意,转义序列在某些终端(例如Windows cmd.exe或未安装ANSI.SYS的DOS)下将不起作用。
system("cls")
是解决该问题的最糟糕的方法,而仅安装ncurses来向上移动光标是完全过头了,因为您始终具有上述的简单解决方案。
每当您想阅读有关ANSI转义序列的更多信息时,请选中this。如果您想将光标后退到行尾,请检查以下内容:
#include<stdio.h>
main(void) {
char a;
printf("scan: ");
scanf("%c",&a);
printf("%c[1Ascan: %c back", 033, a);
}
您必须重新创建行内容。但这不应该太成问题。 通过更高级地使用ANSI转义序列,可以使它变得更容易,您可以在提供的链接中进行检查。