Есть проблема с \t

284
13 февраля 2017, 13:19
using System;
class Trigon
{
    static void Main()
    {
        for (double theta = 0.1; theta <= 1.0; theta = theta + 0.1)
        { 
            Console.WriteLine("Синус {0:F2} равен {1:F2}\t Косинус {0:F2} равен {2:F2} Тангенс {0:F2} равен {3:F2}", theta, Math.Sin(theta), Math.Cos(theta), Math.Tan(theta));
        }
    }
}

Здравствуйте, уважаемые.С помощью ответов из предыдущего вопроса я немного усовершенствовал свой код. :) Убрал лишние слова и Console.WriteLine() И никаких новых for()! :D Получил симпатичные столбцы.Но опять возникла проблема(знаю я надоел, но мне больше некому обратиться. :( Есть ли вы считаете меня тупым можете писать ссылки на нужный материал я прочитаю!!!).В коде использую \t (вроде это таб).На {1:F2}\t все красиво и нормально, но когда пишу \t после {2:F2} расстояние между значением "Косинуса" и словом "Тангенс" 2 раза больше(вроде, это на глаз).Увеличивается расстояние и между строками.В чем проблема(почему меня это так волнует?Я Перфекционист! :D )? Можно было добавить пробелы и вручную но я считаю что это тоже нужно доверить машине. xD Или может есть другие специальные команды чтобы ставить пробелы(пример: \p5 (это 5 пробелов.Значение которое можно изменять))?

Answer 1

Проблему с \t объяснил @Umed в своём ответе, а я расскажу, как с этим бороться.

Если вам нужно вставить фиксированное число пробелов, вы можете использовать просто форматирование с указанием желаемой ширины поля вывода. Например, так:

Console.WriteLine("Синус {0:F2} равен {1:F2}{4,20}Косинус {0:F2} равен {2:F2} Тангенс {0:F2} равен {3:F2}", theta, Math.Sin(theta), Math.Cos(theta), Math.Tan(theta), null);

Я добавил фиктивный последний аргумент null, который выводится после синуса в поле шириной в 20 символов.

Если вы используете C# 6, можно писать и проще:

Console.WriteLine($"Синус {theta:F2} равен {Math.Sin(theta):F2}{' ',20}Косинус {theta:F2} равен {Math.Cos(theta):F2} Тангенс {Math.Cos(theta):F2} равен {Math.Tan(theta):F2}");
Answer 2

\t выравнивает слова по табуляции добавляя недостающие пробелы, но когда слова выравнены по табам и Вы пишите \t, то добавляете 8 (или сколько у Вас таб?) пробельных символов дополнительно.

Пример (один таб - 8 символов, один символ пробела заменён на -|, чтобы проще было считать):

1234 \t 9

превратится в:

1234 -|-|-| 9

То есть добавилось 3 символа и текст, слева от \t, выровнялся до недостающей табуляции.

Другой пример (здесь уже есть два знака пробела):

123456-|-| \t 9

Превратится в:

12345-|-| -|-|-|-|-|-|-|-| 9

Слева от знака \t уже 8 символов и если мы после них напишем \t, то добавим дополнительный таб (то есть 8 символов, так как текст уже был выровнен):

READ ALSO
Xamarin Android совет новичку

Xamarin Android совет новичку

Вопросов несколько:

356
Как отправить ответ в командную строку сразу после команды?

Как отправить ответ в командную строку сразу после команды?

В примере показано как работает код, но нужно чтобы ответ приходил не следующей командой, а продолжением запроса

339
Привязка к IsEnabled

Привязка к IsEnabled

XAML часть:

258
Как получить текст контрола по хендлу

Как получить текст контрола по хендлу

У меня есть хендл контрола, мне нужно получить текст, который он содержит, однако WM_GETTEXT возвращает пустую строку, я предполагаю, что в приложении,...

250