IT Share you

Console.Clear를 사용하여 전체 콘솔 대신 한 줄만 지울 수 있습니까?

shareyou 2020. 12. 2. 22:13
반응형

Console.Clear를 사용하여 전체 콘솔 대신 한 줄만 지울 수 있습니까?


학교에서 질문 / 답변 프로그램을 작업하는 동안 Console.Clear()화면의 모든 것을 지우는 데 사용할 수 있다는 생각이 들었습니다 . 을 사용할 수 있는지 궁금합니다 Console.Readline(valueOne). 질문없이 답만 출력합니다. 내가 하나의 질문 Console.Clear만하면 작동합니다.

가능한 한 지우려면 참조가 아닌 값으로 몇 가지 질문이 있습니다. 질문을 생략하고 몇 가지 답변 만 표시하고 싶습니다. 답을 저장하면 세 가지 변수 Console.Clear()사용할 수 있다고 생각 Console.WriteLine()합니다. 다음과 같이 할 수 있습니다.

Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree).

값이 저장되고 검색되기 때문에 참조를 사용하면 문제가 더 쉽습니다. 단순히 메서드를 사용하여 값을 전달하고 값을 출력하면 main()해당 값에 대한 참조가 없어서 다시 지우고 출력 할 수 없습니다. 그래서 질문 만하고 줄을 지우고 답만 출력해도되는지 궁금합니다.

나는 가능성을 이해하려고 노력하고 프로그램을 설정하려고하지 않습니다. 추가 출력 질문없이 참조 및 값으로 값을 출력하는 능력을 알고 싶습니다.


기술

Console.SetCursorPosition기능을 사용하여 특정 라인 번호로 이동할 수 있습니다. 이 기능을 사용하여 선을 지울 수 있습니다.

public static void ClearCurrentConsoleLine()
{
    int currentLineCursor = Console.CursorTop;
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new string(' ', Console.WindowWidth)); 
    Console.SetCursorPosition(0, currentLineCursor);
}

견본

Console.WriteLine("Test");
Console.SetCursorPosition(0, Console.CursorTop - 1);
ClearCurrentConsoleLine();

추가 정보


더 간단하고 더 나은 솔루션은 다음과 같습니다.

Console.Write("\r" + new string(' ', Console.WindowWidth) + "\r");

캐리지 리턴사용하여 줄의 시작 부분으로 이동 한 다음 콘솔 너비만큼 공백을 인쇄하고 다시 줄의 시작 부분으로 돌아가므로 나중에 자신의 테스트를 인쇄 할 수 있습니다.


"ClearCurrentConsoleLine", "ClearLine"및 위의 나머지 함수는 Console.WindowWidth 대신 Console.BufferWidth를 사용해야합니다 (창을 더 작게 만들려고 할 때 이유를 알 수 있음). 콘솔의 창 크기는 현재 버퍼에 따라 다르며 그보다 더 넓을 수 없습니다. 예 (Dan Cornilescu에 감사드립니다) :

public static void ClearLastLine()
{
    Console.SetCursorPosition(0, Console.CursorTop - 1);
    Console.Write(new string(' ', Console.BufferWidth));
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}

이것은 나를 위해 일했습니다.

static void ClearLine(){
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new string(' ', Console.WindowWidth)); 
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}

내가 선호하는 방법은 PadRight를 사용하는 것입니다. 줄을 먼저 지우는 대신 새 텍스트가 표시된 후 나머지 줄을 지우고 단계를 저장합니다.

Console.CursorTop = 0;
Console.CursorLeft = 0;
Console.Write("Whatever...".PadRight(Console.BufferWidth));

현재 위치에서 현재 줄의 끝까지 지우려면 다음과 같이하십시오.

    public static void ClearToEndOfCurrentLine()
    {
        int currentLeft = Console.CursorLeft;
        int currentTop = Console.CursorTop;
        Console.Write(new String(' ', Console.WindowWidth - currentLeft));
        Console.SetCursorPosition(currentLeft, currentTop);
    }

We could simply write the following method

public static void ClearLine()
{
    Console.SetCursorPosition(0, Console.CursorTop - 1);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, Console.CursorTop - 1);
}

and then call it when needed like this

Console.WriteLine("Test");
ClearLine();

It works fine for me.


public static void ClearLine(int lines = 1)
{
    for (int i = 1; i <= lines; i++)
    {
        Console.SetCursorPosition(0, Console.CursorTop - 1);
        Console.Write(new string(' ', Console.WindowWidth));
        Console.SetCursorPosition(0, Console.CursorTop - 1);
    }
}

I think I found why there are a few varying answers for this question. When the window has been resized such that it has a horizontal scroll bar (because the buffer is larger than the window) Console.CursorTop seems to return the wrong line. The following code works for me, regardless of window size or cursor position.

public static void ClearLine()
{
    Console.SetCursorPosition(0, Console.CursorTop);
    Console.Write(new string(' ', Console.WindowWidth));
    Console.SetCursorPosition(0, Console.CursorTop - (Console.WindowWidth >= Console.BufferWidth ? 1 : 0));
}

Without the (Console.WindowWidth >= Console.BufferWidth ? 1 : 0), the code may either move the cursor up or down, depending on which version you use from this page, and the state of the window.

참고URL : https://stackoverflow.com/questions/8946808/can-console-clear-be-used-to-only-clear-a-line-instead-of-whole-console

반응형