Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35

Ровный вывод в таблице

27.10.2021, 21:26. Показов 8474. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем мне надо вывести данные из структуры в виде таблицы. А конкретно Ф.И.О, но так как строки всегда разной длины таблица съежает. Никак не могу понять как это выравнять.
Вот кусочек кода с выводом.
C++
1
2
3
4
5
6
for (int i = 0; i < kchel; i++)
        {
        cout.width(15);
        cout<<"|"<<obj1[i].familya<<"|"<<setw(5)<<"|"<<obj1[i].name<<"|"<<setw(5)<<"|"<<obj1[i].otchestvo<<"|";
        cout<<endl;
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2021, 21:26
Ответы с готовыми решениями:

Ровный вывод текста в консоли
Избитая тема, но что ни найду, то не подходит, то ещё что. Нужно просто вывести сначала названия колонок, а под ними красивенько пристроить...

Как сделать ровный вывод состояния регистров
Всем исключительно доброго времени дня или ночи. Я начинающий, так что прошу сильно меня не пинать. В общем, вот в чём дело: По...

Ровный вывод табличек в консоль
Мне нужно вывести ровно друг под другом строки. Вывод должен иметь вид таблички. Длинна строк разная и из-за этого сбивается и не...

11
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
27.10.2021, 21:43
Манипулятор setw(N)<<name лишь гарантирует что при выводе name будет использовано не меньше N символов.
Если name больше N символов, он будет все равно выведен полностью. (И таблица "сьедет").
Это уже ваша задача - решать что выводить а что обрезать, в подобных случаях

Для сравнения.
C++
1
2
cout << setw(10) << setfill('_') << "Hello " << '|' << setw(5) << "World " << '|' << endl;
cout << setw(10) << "Hello " << '|' << setw(10) << "World " << '|' << endl;
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
27.10.2021, 22:12
сделайте для fio одно поле и выводите, например ФИО и возраст
C++
1
cout << "| " << setw(40) << left << obj1[i].fio << "| " << setw(5) << obj1[i].age << "|\n";
0
Злостный нарушитель
 Аватар для Verevkin
10299 / 5722 / 1268
Регистрация: 12.03.2015
Сообщений: 26,497
27.10.2021, 22:25
printf().
0
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
27.10.2021, 22:29  [ТС]
СПАСИБО! ПОЧЕМУ Я САМ ДО ЭТОГО НЕ ДОГАДАЛСЯ

Добавлено через 2 минуты
Знаю, но его нельзя использовать.
0
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
27.10.2021, 22:39  [ТС]
А как теперь выровнять правую границу?
C++
1
2
3
4
5
6
for (int i = 0; i < kchel; i++)
        {
        cout.width(15);
        cout<<"|"<<setw(15)<<obj1[i].familya<<' '<<obj1[i].name<<' '<<obj1[i].otchestvo<<"|";
        cout<<endl;
        }
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.10.2021, 14:44
Verevkin, а что ПринтФ обрезает данные ???
RageGen,
Варианты :
1. Взять ширину (количество смволов) столбца с запасом.
2. Подготовить строку таблицы с урезанием данных.
3. Создать "резиновую" таблицу. Проанализировать все выводимые данные.
Рассчитать ширину столбцов. Распечатать таблицу с полученными ширинами столбцов.

Enjoy.

Добавлено через 1 минуту
Verevkin,
Модификатор ширины
Ширина (десятичное число или символ звёздочка) указывает минимальную ширину поля (включая знак для чисел). Если представление величины больше, чем ширина поля, то запись выходит за пределы поля (например, %2i для величины 100 даст значение поля в три символа), если представление величины менее указанного числа, то оно будет дополнено (по умолчанию) пробелами слева, поведение может меняться предшествующими флагами.
что в лоб, что по лбу...
0
Злостный нарушитель
 Аватар для Verevkin
10299 / 5722 / 1268
Регистрация: 12.03.2015
Сообщений: 26,497
28.10.2021, 14:50
Цитата Сообщение от SmallEvil Посмотреть сообщение
а что ПринтФ обрезает данные ???
Нет. Она их только выводит.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.10.2021, 14:54
Лучший ответ Сообщение было отмечено RageGen как решение

Решение

Цитата Сообщение от RageGen Посмотреть сообщение
А как теперь выровнять правую границу?
setw(N) действует только на один последующий вывод!
C++
1
2
3
4
5
6
7
    cout << setw(10) << "Right";
    cout << " | ";
    cout << setw(10) << left << "Left " << " | " << endl;
    
    cout << setw(10) << "OtherRight";
    cout << " | ";
    cout << setw(10) << left << "OtherLeft " << " | " << endl;
все ровно,
1
0 / 0 / 0
Регистрация: 01.08.2020
Сообщений: 35
28.10.2021, 18:34  [ТС]
СПАСИБО!
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.10.2021, 18:54
SmallEvil, вариант, который Вы предлагаете оставит разное количество пробелов между фамилией, именем и отчеством. повторюсь: для ФИО лучше задать одно поле
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.10.2021, 19:08
Цитата Сообщение от Yetty Посмотреть сообщение
повторюсь: для ФИО лучше задать одно поле
да, это разумно, но не суть вопроса автора про форматирование.
И ваш комментарий должен быть адресован не мне а ТС.

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
для ФИО лучше задать одно поле
плюс это не уменьшит поле вывода для этих трех строк ФИО.
Оно должно быть статичным при выборе форматирования страниц по моему методу №1

Добавлено через 1 минуту
А с точки зрения читабельности и "смотрибельности" (найти нужную строчку Имя или Фамилию)
разбиение на отдельные столбцы куда выгодней чем через один пробел, проверено Заннусси
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2021, 19:08
Помогаю со студенческими работами здесь

Ровный вывод всех фото
Здравствуйте. Подскажите пожалуйста как реализовать ровный вывод всех картинок. Например вывожу фотоальбом. Там картинки 1000х700 ,...

Как сделать ровный вывод в файл?
У меня вот так вывелось: Искомое число= 5904 Последовательный: Позиция= 896 Шагов= 896 Двоичный поиск: Позиция= 590 Шагов= 10...

"Ровный" вывод вещественных чисел в столбик
Такой вопрос, как вывести ряд вещественный чисел, с одинаковым количеством знаков после запятой, но так, чтобы ровно, вне зависимости от...

Табулирование функций и вывод результатов в таблице. Фораматированный вывод данный
Составить программу вычисления функции с использованием оператора цикла с предусловием. Переменная х изменяется с шагом h на заданном...

Ровный текст (по столбикам)
Товарищи, доброй ночи. Подскажите, пожалуйста, как можно решить фичу, выгружаю справку о программе в cmd и сохраняю результат в .txt, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru