0

メッセージがウィンドウのデフォルトの 0-79 X 幅を超えない限り、コンソール ウィンドウにメッセージを表示したいと考えています。私が持っているコードは次のようになります。

int xRemaining = 80 - mRobot.CurrentPos.X;
string message = "ID{0:d} Facing {1:s} at ({2:d},{3:d}) home is({4:d},{5:d})";
string formatMessage = string.Format(message,mRobot.ID,mRobot.getDir.ToString()/*...*/;

if(mRobot.CurrentPos.Y < 24)
{
  if (xRemaining < formatMessage.Length)
    {
     Console.SetCursorPosition((mRobot.CurrentPos.X - xRemaining), mRobot.CurrentPos.Y+1); 
    }
  else
    {
     Console.SetCursorPosition(mRobot.CurrentPos.X, mRobot.CurrentPos.Y + 1);
    }
}

else
{
  if(xRemaining < formatMessage.Length)
  {
   Console.SetCursorPosition((mRobot.CurrentPos.X-xRemaining), mRobot.CurrentPos.Y-1);
  }
  else
   {
    Console.SetCursorPosition(mRobot.CurrentPos.X, mRobot.CurrentPos.Y-1);
   }
}
Console.Write(message,,mRobot.ID, mRobot.getDir.ToString(), mRobot.CurrentPos.X, mRobot.CurrentPos.Y,mRobot.Home.X,mRobot.Home.Y);

編集:string.Formatを使用しましたが、まだ次の行に実行されているようです:/

4

2 に答える 2

1

string.Format次のメソッドでメッセージをフォーマットできます。

string message = "ID{0:d} Facing {1:s} at ({2:d,3:d}) home is({4:d,5:d})";
string formattedMessage = string.Format(message, mRobot.ID, mRobot.getDir.ToString(), /* ... */);
int msgLength = formattedMessage.Length;

後で、次のように表示できます。

Console.WriteLine(formattedMessage);
于 2013-03-23T15:04:34.207 に答える
0

文字列の長さを取得する前に、文字列をフォーマットする必要があります。現在、フォーマットされていない文字列の長さを取得しています。string.Formatこれを行うには、次のコマンドを使用する必要があります。

string output = string.Format(message, .....);

....

if (xRemaining < output.Length)
{
    ....
}

....

Console.Write(output);
于 2013-03-23T15:05:48.067 に答える