2017-08-21 88 views
0

掙扎於打印。我知道它應該是兩個for循環打印出重複的字母,但是,有問題縮進線。它應該是一個簡單的控制檯C#程序打印出像下面的形狀與輸入3.打印帶有可變輸入的三角形形狀的ASCII

XXXXX 
XXX 
    X 

隨着輸入4應該是這樣

XXXXXXX 
XXXXX 
    XXX 
    X 

這是我的代碼。兩個for循環可以正確地獲取字母,但是所有行都排在了左側,而不是中央。

static void Main(string[] args) 
    { 
     string num = Console.ReadLine().Trim(); 
     int n = Convert.ToInt32(num); 
     int k=1; 
     for(int i = n; i>=1; i--) 
     { 
      Console.WriteLine("\n"); 
      Console.WriteLine("".PadLeft(n)); 
      for (int j = (2*i-1); j>=1;j--) 
      {     
        Console.Write("0"); 
      } 
     } 
     Console.Read(); 
    } 
+0

嗨,至少把你的代碼放在這裏,不僅是實際的結果和預期的一個..但是,一旦你發佈你的代碼,有些人仍然不渴望回答你,因爲......像往常一樣*我們在stackoverflow中不是代碼生成器*。如果用於調試,您可能需要在[代碼評論](https://codereview.stackexchange.com/)中提問。 –

+0

是的,兩個for循環可以正確輸入字母,但是所有的行都排在了左側,而不是中央。 –

+0

PadLeft(n)將不起作用,因爲空間不固定。 –

回答

0

聲明:

Console.WriteLine("".PadLeft(n)); 

是正確的想法但它不能令人信服。

對於您的情況,n是您希望打印的行數並且是不變的。每行開始時需要的空格數應該從零開始,每行增加一個。

在任何情況下,打印任何的空間,然後換行數(因爲它是WriteLine)是不是你想要的,你應該使用Write代替。

所以INT n = Convert.ToInt32(num);Console.Read();之間的代碼會變得更好,就像這樣:

for (int lineNum = 0; lineNum < n; lineNum++) { 
    int spaceCount = lineNum; 
    int xCount = (n - lineNum) * 2 - 1; 

    Console.Write("".PadLeft(spaceCount)); 
    Console.WriteLine("".PadLeft(xCount, 'X')); 
} 

你會發現有一些其他的變化。首先,我使用了更有意義的變量名稱,這是我的一個堅持者 - 在某些情況下使用i是可以的,但我經常發現使用描述性名稱更具可讀性。

我也使用PadLeftX字符串,以消除內部循環的需要。