fgets() 之后的 fputs() 到同一控制台行

fputs() to same console line after fgets()

#include <stdio.h>
int main()
{
    char line[100];

    fputs("Enter text: ", stdout);
    fgets(line, 100, stdin);
    putchar('\b');    //doesn't do anything
    fputs("   <-- What a great text!", stdout);
}

代码打印:

Enter text: (whatever)
   <-- What a great text!

相反,我希望:

Enter text: (whatever)   <-- What a great text!

显然 '\b' 无法从 stdin 退格 '\n',即使它是最后一个字符。

有什么想法吗? C++ 会很好,像 ncurses 这样的库就不行。仅供参考:A similar SO question 处理 stdout 仅无用户输入。

如果可以利用console codes:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char line[100];
    size_t size;

    size = (size_t)printf("Enter text: ");
    fgets(line, 100, stdin);
    printf("3[A3[%zuC", size + strlen(line));
    fputs("   <-- What a great text!", stdout);
    return 0;
}

将光标向前移动N 列(取决于您打印的内容),然后将光标向上移动1 行。例如:我将光标向右移动 30 列,然后向上移动 1 行。这应该有效。

#include <stdio.h>
int main()
{
    char line[100];

    fputs("Enter text: ", stdout);
    fgets(line, 100, stdin);
    printf(" 3[30C");
    printf("3[1A");
    fputs("   <-- What a great text!", stdout);
}

代码打印:

Enter text: (whatever)            <-- What a great text!