Выровненные столбцы
Когда вы выводите таблицу, например чек или таблицу результатов, хочется, чтобы столбцы были ровными. Но обычно каждая строка занимает ровно столько места, сколько её текст, и числа оказываются где попало:
printf("%s %.2f\n", "Bread", 2.5);
printf("%s %.2f\n", "Chocolate", 3.75);Это выведет:
Bread 2.50
Chocolate 3.75Число между % и буквой спецификатора формата задаёт ширину: сколько символов значение занимает как минимум. Более короткое значение дополняется пробелами. %10s добавляет пробелы слева, то есть выравнивает текст по правому краю. С минусом, %-10s, пробелы идут справа, и текст выравнивается по левому краю — обычно это то, что нужно для имён. Ширина есть и у чисел. Квадратные скобки в этом примере показывают, где каждое значение начинается и заканчивается:
printf("[%5d]\n", 42);
printf("[%-5d]\n", 42);
printf("[%10s]\n", "Anna");
printf("[%-10s]\n", "Anna");
printf("[%6.2f]\n", 3.14159);Это выведет:
[ 42]
[42 ]
[ Anna]
[Anna ]
[ 3.14]В %6.2f число 6 — это вся ширина, включая десятичную точку, а 2 — число знаков после запятой. Чек с заданной шириной выглядит так:
printf("%-10s %6.2f\n", "Bread", 2.5);
printf("%-10s %6.2f\n", "Chocolate", 3.75);Это выведет:
Bread 2.50
Chocolate 3.75Более длинное значение не обрезается: %3s выведет "Alexander" целиком, нарушится только выравнивание. Поэтому выбирайте ширину по самому длинному значению в столбце. И помните про русские буквы: ширина считается в char, а каждая русская буква занимает два char, поэтому строка со словом «Хлеб» сдвинулась бы на четыре места. Вот почему названия товаров в этом упражнении написаны латиницей.
В упражнении названия товаров хранятся в массиве строк. Это двумерный массив символов, который вы знаете из урока о массивах: в char items[4][12] 4 строки, и каждая строка — это одна строка текста с местом для 11 символов и '\0'. items[1] — это вся вторая строка, поэтому её выводят через %s:
char items[4][12] = {"Bread", "Milk", "Chocolate", "Tea"};
printf("%s\n", items[1]);Это выведет:
MilkЗадание
- 1
Измените форматную строку в цикле: выровняйте названия по левому краю в столбце шириной 10 символов,
%-10s, а цены — по правому краю в столбце шириной 6 символов с 2 знаками после запятой,%6.2f. Между столбцами оставьте один пробел. Вывод будет выглядеть так:Bread 2.50 Milk 1.20 Chocolate 3.75 Tea 4.10 - 2
Под циклом выведите строку с итогом: текст
Totalв столбце такой же ширины, как у названий, и сумму цен в столбце такой же ширины, как у цен. Суммируйте цены в цикле. Строка будет выглядеть так:Total 11.55