![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
![]()
Доброго времени суток.
Появилась потребность написать интерфейс в консоли, в ходе которой я столкнулся с некоторыми проблемами. Вот что я хочу сделать: символьная рамочка(задается 4-мя цифрами), а внутри нее выводятся разные данные, например что-нибудь такое вот: (не знаю почему рамочка поганится здесь, на форуме, вообще она прямоугольная ![]() Код:
1)если я подаю ему слишком длинные данные, он их обрезает. 2)данные нужно переодически обновлять (выборочно) теперь что есть: функция для рамочки) класс для "окошка", состоящий пока только из координат курсора в консоли(т.е. можно считать, вообще не реализован) класс для данных, которые нужно обновлять, тоже состоит из координат курсора для этих данных + функция обновления. чтобы было ясней: Код:
-как реализовать контроль длины вывода? ----знаю есть манипулятор width(), но он контролирует только в большую сторону ----можно ли как то положить сначала все в буфер а потом выводить ----только, скажем, 15 символов (имеются ввиду встроенные средства)? --------можно, конечно, завести char *buf какой-нибудь --------и в него все складировать, а затем выводить но, --------во-первых может это уже сделано в глубинах ostream?, --------а во-вторых: нужна конвертация из всех типов в char (числа тоже надо выводить, да и мало ли что еще...), --------и код будет похож непонятно на что, а хочется все-таки что бы он напоминал Код:
если вы считаете этот метод ужасным/тупиковым/бесперспективным предложите другой вариант реализации интерфейса (не графический конечно же) буду только рад ![]() |
![]() |
![]() |
![]() |
#2 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
![]()
Как вариант - используйте вместо пробелов табуляцию. Если данные будут по длинне будут отличаться на пару символов, то все будет ок.
А так... перед выводом приводите все к строке и в зависимости от длинны строки добавляйте пробелы или обрезайте строку.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
![]()
через поток... не могу сказать, не пользовался ими для таких целей.
Я в таком случае писал себе функцию itoa (она в некоторых компиляторах бывает, но стандартом она не требуется, следовательно ее отсутствие - нормальное явление).
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
![]()
ну тогда вопрос: можно ли положить в буфер данные, но не выводить их?
для входных данных буфер замечательно работает, а вот чтобы для выходных - ни разу не встречал... |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Если не ошибаюсь, std::strstream это то, что вам надо
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 02.01.2011
Сообщений: 3,328
|
![]()
Не понял идею.
Допустим у нас в консоль выводятся значения трёх счётчиков. Эти значения увеличиваются в реальном времени (пусть с разной скоростью). Окошко консоли обновляется. Код:
Код:
Делайте таблицу максимальной и фиксированной ширины, или увеличивайте ширину таблицы (опять же до определённого максимального значения). Проверяйте длину выходных данных, если данные не умещаются в таблицу, то выводите соответствующее сообщение об ошибке (и эти данные), например, на экран консоли под таблицей. Считаю, что обрезать выходные данные - неправильно. |
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
![]()
таблица фиксированной ширины, расширять пока не собирался, но может и надумаю.
насчет обрезания: как лучше? так Код:
к тому же если строка обрезана, можно закончить ее многоточием, и тут уже не скажешь что данные не правильные насчет ошибок: по-моему не стоит акцентировать внимание пользователя на том, что у вас не влезла строка и кидать еррор, т.к. как таковая ошибка отсутствует, рассчеты будут проведены правильно, некорректен только вывод |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 24.12.2012
Сообщений: 82
|
![]() Код:
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пошаговый псевдо-3d шутер в псевдографике | #include <Markus> | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 49 | 20.06.2016 01:32 |
[С++] Cоздание таблиц в псевдографике | SadSad13 | Помощь студентам | 2 | 17.10.2011 03:54 |
Красивый интерфейс в Qt | savva-paladin | Qt и кроссплатформенное программирование С/С++ | 5 | 05.12.2010 09:11 |
Компоненты. Красивый интерфейс | GenniY | Компоненты Delphi | 3 | 13.10.2009 11:56 |
красивый интерфейс проги | jkpro | Общие вопросы Delphi | 4 | 04.10.2009 18:24 |