使用可变输入打印三角形的ASCII

时间:2017-08-21 00:40:35

标签: c# console-application

苦苦寻求打印。我知道它应该是两个for循环来打印重复的字母,但是,有问题缩进行。它应该是一个简单的控制台C#程序,用输入3打印出如下形状。

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

1 个答案:

答案 0 :(得分: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在某些情况下使用PadLeft,但我经常发现它使用描述性更具可读性名。

我也使用X来执行apikey字符串,以便不再需要内循环。