如何将文本与控制台中下一行中的文本对齐?

时间:2014-11-26 09:06:39

标签: c#

是否有一种快捷方法可以将第一行中的文本与控制台中的第二行对齐?

示例:

输入您的姓名:Charles

输入您的学号:20130140

//输出应该是这样的:

   Name      Student Number
  Charles       20130140

这是我的代码,但它是一个很长的方法。

class MainClass
{
        public static void Main (string[] args)
        {
            int num, nam;
            string snum, name, sec;
            int num1, num2, num3;
            int var;
            int bosh;

        Console.WriteLine ("Enter student number: ");
        snum = Console.ReadLine ();
        Console.WriteLine ("Enter Name: ");
        name = Console.ReadLine ();
        Console.WriteLine ("Enter Section: ");
        sec = Console.ReadLine ();

        num1 = snum.Length;
        num2 = name.Length;
        num3 = sec.Length;

        Console.WriteLine ("        Student Number        Name        Section        ");
        Console.Write("\n");

        if (num1 <= 14) {

            num = (14 - num1) / 2;
            var = (14 - num1) - num;

            for (int i = 0; i < num; i++) {

                Console.Write (" ");
            }
            Console.Write ("        " + snum);

            if (num2 <= 4) {
                nam = (4 - num2) / 2;
                //sum of all sapaces
                bosh = var + nam + 8;

                for (int i = 0; i < bosh; i++) {

                    Console.Write (" ");
                }
                Console.Write (name);
            } else {
                nam = ( num2 - 4) / 2;
                //sum of all sapaces
                bosh = var + (8 - nam);

                for (int i = 0; i < bosh; i++) {

                    Console.Write (" ");
                }
                Console.Write (name);

            }


        } else if (num1 > 14){

            num = 8 - ((num1 - 14) / 2);

            for (int i = 0; i < num; i++) {

                Console.Write (" ");
            }
            Console.Write (snum);

            if (num2 <= 4) {
                nam = (4 - num2) / 2;
                //sum of all sapaces
                bosh = nam + num;

                for (int i = 0; i < bosh; i++) {

                    Console.Write (" ");

                }

                Console.Write (name);

            } else {

                nam = (num2 - 4) / 2;
                //sum of all sapaces
                bosh = num - nam;

                for (int i = 0; i < bosh; i++) {

                    Console.Write (" ");

                }

                Console.Write (name);

            }

        }

        Console.ReadKey ();

    }

}

1 个答案:

答案 0 :(得分:2)

.NET中使用的格式字符串接受an alignment component,允许您指定参数的长度及其对齐方式,例如:

Console.WriteLine("{0,5} {1,-10}",5,10);

将为第一个参数使用5个空格,右对齐,第二个参数使用10个空格,左对齐。

在你的情况下,你可以写一些类似的东西:

Console.WriteLine("{0,-25} {1,-15} {2,10}",name,number,section);

这将在左对齐的第1-25列中输出name,在左对齐的27-42中输出number,在右对齐到10个字符的第44列中输出

棘手的部分是,如果格式化字符串的长度大于对齐长度,则忽略对齐。您可以通过首先在最终输出语句之前格式化每个元素,将它们截断为允许的最大长度来解决这个问题。

不幸的是,没有办法居中对齐参数。您必须计算每个格式化字符串的长度并在代码中填充它。 this SO question的答案使用中心对齐参数的函数,或者使用格式字符串的参数居中对齐的自定义IFormattable