在C中的scanf()之后转到上一行

时间:2018-09-30 12:52:02

标签: c printf scanf

考虑以下代码:

#include<stdio.h>

void main()
{
    char a;
    printf("scan: ");
    scanf("%c",&a);
    printf("\b back");
}

在用户按下Enter键并使光标向下移动之后,我想将其向上移动,以便可以打印单词“ back”(覆盖)并覆盖“ scan”(扫描)。我该怎么做?

1 个答案:

答案 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转义序列,可以使它变得更容易,您可以在提供的链接中进行检查。