1. ホーム
  2. c#

[解決済み] Console.Clearは、コンソール全体ではなく、1行だけをクリアするために使うことができますか?

2023-04-02 21:11:52

質問

学校で質問と回答のプログラムを作っているとき、ふと思いついて Console.Clear() を使えば、画面上のものをすべて消すことができる。というのは Console.Readline(valueOne) を使って、質問なしで答えだけを出力することができるでしょうか。もし私が質問を1つだけしたなら Console.Clear が機能します。

私は可能であれば消去するために、参照ではない値を持ついくつかの質問を持っています。私は質問を省き、いくつかの答えだけを表示したいです。回答を保存しておけば Console.Clear() を使用することができると思います。 Console.WriteLine() を3つの変数で指定します。こんなことができるんです。

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();

その他の情報