2017-12-04 8 views
2

特定の行を変更してループするために、コンソールの最後の行を上書きしたいとします。コンソールの最後の行が上書きされない

例: コンソール に印刷します。そのため、その後...そして...

これは私のコード:

int dot = 1; 
    while (true) 
    { 
     switch (dot) 
     { 
      case 1: 
       Console.SetCursorPosition(0, Console.CursorTop-1); 
       Console.WriteLine("."); 
       dot++; 
       Thread.Sleep(500); 
       break; 
      case 2: 
       Console.SetCursorPosition(0, Console.CursorTop -1); 
       Console.WriteLine(".."); 
       dot++; 
       Thread.Sleep(500); 
       break; 
      case 3: 
       Console.SetCursorPosition(0, Console.CursorTop - 1); 
       Console.WriteLine("..."); 
       dot = 1; 
       Thread.Sleep(500); 
       break; 
     } 
    } 
} 

私の問題は、それがその最初の完全なラウンド後に(それが「...」初めてでを印刷した後に)印刷ではありません""

"..." のコンソール滞在私は意味:

  • "" print
  • 削除 "。"そして、プリント ".."
  • 削除 ".." と印刷 "..."

今では "..." "..." の代わりに削除とどまると印刷 ""。

誰かがなぜアイデアを持っていますか?

答えて

9

1つのドットを印刷するときに1文字しか印刷しません。残りの行には影響しません。

あなたはこの変更した場合:

Console.WriteLine(". "); 

Console.WriteLine("."); 

を、それは前の繰り返しによって書かれた任意の文字を削除します。 (これはまだでしょうがライン上の他のない鮮明なもの。)

(あなたが一貫性を保つためConsole.WriteLine(".. ")からConsole.WriteLine("..")を変更することもできますが、あなたはすでに、最終的なスペースを印刷してきたように、それは違いをすることはありません前の反復)あなたはあまりにもかなり重複を削除することができ

注:

string[] dots = { ". ", "..", "..." }; 
int index = 0; 
while (true) 
{ 
    Console.SetCursorPosition(0, Console.CursorTop -1); 
    Console.WriteLine(dots[index]); 
    index = (index + 1) % 3; 
    Thread.Sleep(500); 
} 
+0

一つのウィッテン、右のようになるだろう?すべてのwritelineはコンソール上の新しい行をダンプします... –

+0

@PranayRana:いいえ、それは 'Console.SetCursorPosition(0、Console.CursorTop-1);'コードのためです。 –

+0

私はまだ質問を理解しようとしているので、試してみましょう –

0

あなたが文字を置き換えるが、最初の実行上の変更を見るように置き換えることは何もありませんコンソールへの書き込み中。 2番目のループでは、最初のドットを新しいドットに置き換えても、それは画面上に変化をもたらさない。それはそれがあるので、あなたの最初の文字列にドットの後にスペースを追加することです解決する最も簡単な方法は、長い3つの文字です:自動的にジャンプカーソルになり最後に改行(\n)文字を追加

". " 
-1

Console.WriteLine次の行

Console.Writeを使用する必要があります。改行文字は追加されません。しかし、テキストの最後に\rを置いて、カーソルを開始位置に戻さなければなりません。

だから、あなたのprint文は、あなたがこのように行うことができるため、あなたの後に最後の反復を...を交換したい

Console.Write(". \r");

Console.Write(".. \r");

Console.Write("...\r");

+0

その点は何ですか...改行は改行を意味します –

+0

私の答えを更新しました。 –

+0

OPのコードは、カーソルの位置を明示的に設定することによって、既に「コンソールの一番下にある印刷を繰り返し」という言葉でうまく動作します。あなたのコードは、最初のケースで1つのドットだけを印刷するので、OPによって指定された問題を解決しません。後のドットを後のラインから削除しません。 –

0

ようになり、あなたPadRight関数を利用することができます。 PadRightは、あなたがその中の数値の値を設定できるように行く良い方法です。

var str = "."; 
var padded = str.PadRight(2); 
// padded = ". " 

ので、あなたのコードは、あなたがそれを置き換えることはできませんコンソール上でこの

switch (dot) 
     { 
      case 1: 
       Console.SetCursorPosition(0, Console.CursorTop-1); 
       var str = "."; 
       var padded = str.PadRight(2); 
       Console.WriteLine(str); 
       dot++; 
       Thread.Sleep(500); 
       break; 
      case 2: 
       Console.SetCursorPosition(0, Console.CursorTop -1); 
       Console.WriteLine(".."); 
       dot++; 
       Thread.Sleep(500); 
       break; 
      case 3: 
       Console.SetCursorPosition(0, Console.CursorTop - 1); 
       Console.WriteLine("..."); 
       dot = 1; 
       Thread.Sleep(500); 
       break; 
     }