2017-08-21 89 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字符串,以消除内部循环的需要。