Рассмотрим одну тонкость, связанную с выводом матриц, да и всех прочих таблиц. Изменим немного инициализацию матрицы:
const int m = 4, n = 5;
int matrix[m][n] = {
{1, 20, 50, 40, 3},
{5, 68, 7, 4, 60},
{1, 2, 57, 4, 3},
{9, 8, 7, 6, 0},
};
Затем выведем её на экран при помощи созданного выше кода и увидим, что столбцы матрицы окажутся неровными:
Эта проблема возникает из-за того, что некоторые элементы матрицы занимают одну позицию, а другие – две. Консольные шрифты являются моноширинными (ширина каждого символа одна и та же), поэтому для того, чтобы столбцы выводились ровно, нужно сделать так, чтобы ширина поля как-то дополнялась пробелами, если символ всего один.
Для этого существуют так называемые модификаторы вывода. Некоторые модификаторы называются флагами форматирования. В настоящий момент нас интересует модификатор, позволяющий задать ширину поля, которое отводится под выводимое значение. Он задаёт минимальную ширину поля, в которое выводится значение.
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
cout.width(2);
cout << matrix[i][j] << " ";
}
cout << endl;
}
По умолчанию пустые клетки заполняются пробелами, однако с помощью функции fill() можно задать любой другой:
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
cout.fill('*');
cout.width(2);
cout << matrix[i][j] << " ";
}
cout << endl;
}
Наконец, выравнивание ячеек можно задать по левому краю: