如何在 c++ "not whole screen" 的文本模式下清除特定文本?

How can i clear particular text in text mode in c++ "not whole screen"?

本文关键字:文本 模式 清除 screen c++ not whole      更新时间:2023-10-16
system("cls") - #include <stdlib.h>  STANDARD HEADER FILE 
clrscr()      - #include <conio.h>   NON-STANDARD HEADER FILE

这两个功能清除整个屏幕。我想清除,或者我们可以对特定字符或字符串使用 BACKSLASH '\b' 的概念,而不会影响其他内容。在插入任何数字时。例如:海洛当我同时输入这个"hellow"时,它会回到"O"。

以下两个 C 程序都可以在 Debian 上工作:

#include <stdio.h>
int main()
{
  printf("xxxHellowbxxxn");
  return 0;
}

#include <stdlib.h>
int main() { return system("echo 'xxxHellowbxxx'"); }

两者都会产生您期望的结果:

thomas@yozu-thomas:~/Programming$ gcc -o main main.c
thomas@yozu-thomas:~/Programming$ ./main
xxxHelloxxx
thomas@yozu-thomas:~/Programming$ 

这可能也适用于Mac OSX(因为它也使用bash(,但我不知道Windows cmd.exe或PowerShell。

您可以使用

windows.h库中的SetConsoleCursorPos()函数,通过调用文本打印函数用空白字符/空格覆盖一个或多个字符。

#include <windows.h>
#include <stdio.h>
void clearScreen(int from_x, int to_x, int from_y, int to_y) // this function clears a block of text
{
    HANDLE conHandle = GetStdHandle(STD_OUTPUT_HANDLE);
    for(int i = 0; i<to_y-from_y; i++)
    {
        COORD pos;
        pos.Y = from_y+i;
        pos.X = from_x;
        SetConsoleCursorPosition(conHandle, pos);
        for(int j = 0; j<to_x-from_x; j++)
        {
            printf(" ");
        }
    }
    return;
}
int main()
{
    for(int i = 0; i<10; i++)
    {
        for(int j = 0; j<10; j++)
        {
            printf("a");
        }
        printf("n");
    }
    clearScreen(1, 3, 4, 6);
    return 0;
}