Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > sprintf: форматированный вывод |
Автор: Alca 26.3.2009, 18:07 |
sprintf: форматированный вывод, как? Надо сделать так, чтоб 2-ая колонка была выровняна по левому краю: row_11111 row_dsfgabcde row_12 row_dfgsdabcded row_123345000 row_abcdesdcfsdf row_1234 row_abcdewer row_12345 row_abcde |
Автор: Acer 26.3.2009, 18:11 |
Добавляй '\t' или "\t\t" в начале каждой строки второй колонки |
Автор: Alca 26.3.2009, 18:15 | ||
Съезжает строка: row_11111 row_dsfgabcde row_12 row_dfgsdabcded row_123345000 row_abcdesdcfsdf row_1234 row_abcdewer row_12345 row_abcde <<<<<<<<<<<<< |
Автор: 586 26.3.2009, 18:20 | ||
|
Автор: Acer 26.3.2009, 18:38 | ||||||
У меня так не работает... А вот тако вот:
Только тут придется определять длинну строки, чтобы поставить достаточное количество пробелов... http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html написанно, как оно должно работать. |
Автор: 586 26.3.2009, 18:42 |
Alca, то есть, распечатываешь таблицу в таком формате: "%-10s %s" Какая ОС, какой компилятор? Что выводится в результате? |
Автор: Alca 26.3.2009, 18:46 | ||
Не %-10s а %+10s. Поставил для каждой строки свой интервал (+7s, +3s, +5s, ...) - в MessageBox одна строка вылазит, а когда скопировал содержимое бокса в файл, то вылазит другая строка... ![]() Добавлено через 2 минуты и 43 секунды
С++ Builder 6.0, WinXP SP3 |
Автор: Acer 26.3.2009, 18:50 | ||||
ОС - WinXP, компилятор - GCC. В результате получается вывод строк без форматирования. То есть не в виде таблицы. Я сделал вот как:
То есть спецификатор %-10s устанавливается для пробелов. Тогда форматируется. Пробелы выводятся перед вторым столбцом |
Автор: Alca 26.3.2009, 18:53 |
http://pic.ipicture.ru/uploads/090326/WDpnSJvt20.png |
Автор: Acer 26.3.2009, 18:55 |
Alca, какой код такое вызывает? |
Автор: Alca 26.3.2009, 18:56 | ||
Это я делаю свою реализацию assert-a... |
Автор: 586 26.3.2009, 18:57 |
Результаты теста: http://codepad.org/dRQXcMhm |
Автор: Alca 26.3.2009, 19:00 | ||
А ты поробуй с двумя, тремя колонками и чтоб строки были разной длины. Добавлено через 4 минуты и 29 секунд Мне хотя бы чтоб в мсжбоксе нормально выводило ![]() |
Автор: 586 26.3.2009, 19:10 | ||||||
http://codepad.org/3mupZOkM
Там шрифт не моноширинный (т.е. буквы разного размера). |
Автор: zim22 26.3.2009, 19:40 | ||
может Вам снова С++ вариант подойдёт ![]()
Сначала Вы устанавливаете ширину поля, а потом уже записываете внутрь "поля" переменную. С помощью модификатора left происходит выравнивание по левой границе поля. По правой границе - right |
Автор: inside_pointer 28.3.2009, 23:40 |
там проблем никаких, вот здесь просто, если текст выходит за отведённую границу поля, то её приоритет выше и лишнее отбрасывается |
Автор: Alca 29.3.2009, 00:42 | ||
И где здесь форматирование? |
Автор: inside_pointer 29.3.2009, 01:01 |
какое форматирование ? |
Автор: Alca 29.3.2009, 01:17 |
sprintf: форматированный вывод, выравнивание колонки |
Автор: inside_pointer 29.3.2009, 01:24 |
а зачем её выравнивать, она всегда будет выравнена с помощью первой у тебя же строчки съезжают из-за первой колонки, а не из-за второй |
Автор: Alca 29.3.2009, 15:51 | ||
Ты попробуй сделать мсжбокс с несколькими колонками и чтоб строки были раЗной длины... ![]() |
Автор: Alca 29.3.2009, 17:32 |
И с разными шрифтами... |
Автор: inside_pointer 30.3.2009, 01:47 |
так тут две колонки, если тебе три надо, ты должен выравнивать и первую и вторую, но не третью а для мсджбокс нужно назначать выравнивание, если там есть параметры, единый формат окна для всех сообщений а если нету, то перед помещением отформатированной строки, нужно её поместить в отформатированную область, а потом эту область закидывать в мсджбокс |
Автор: Alca 31.3.2009, 11:10 |
http://forum.vingrad.ru/forum/topic-143928.html Добавлено через 2 минуты и 56 секунд http://forum.vingrad.ru/forum/topic-161083.html |