powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf() utf8 + выравнивание по ширине
25 сообщений из 54, страница 2 из 3
printf() utf8 + выравнивание по ширине
    #39982710
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
Не будет изменений в sprintf. В формате кроме минимальной ширины можно задать и максимальную. Если минимальная ширина будет учитывать количество символов, а максимальная - количество байт, то это будет нелогично. Я если максимальную тоже сделать количеством символов, это сломает программы, которые используют максимальную ширину для защиты от переполнения буфера.

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982815
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А куда он денется? Другого-то способа вывода в Си нет.
Я про другое: не станешь же ты "навешивать" на UTF-8 ещё и "грехи" ANSI-терминала?..
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982823
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мне помешает? Только не на utf-8, конечно, а на printf. Аффтару просто надо
взглянуть в глаза реальности: printf работает исключительно с кучками байт, никаких
"символов" в нём не наблюдается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982839
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

А что мне помешает? Только не на utf-8, конечно, а на printf. Аффтару просто надо
взглянуть в глаза реальности: printf работает исключительно с кучками байт, никаких
"символов" в нём не наблюдается.

Любишь ты очевидные вещи писать.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982845
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
printf не в курсе сколько знакомест на экране займут те
байты, которые он посылает консольному драйверу.
А мог бы быть в курсе, хотя бы основываясь на информации по кодировке из локали и правилах кодирования символов. Посмотрим, что будет в C++20...
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982910
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
А мог бы быть в курсе, хотя бы основываясь на информации по кодировке из локали и правилах кодирования символов.
А давайте, для начала, определим ширину строки, в которой печатные символы US-ASCII перемежаются совершенно стандартными управляющими кодами ^H, ^I, ^L и вертикальной табуляции. Вот без всякого юникода и локалей.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982915
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Barlone
Не будет изменений в sprintf. В формате кроме минимальной ширины можно задать и максимальную. Если минимальная ширина будет учитывать количество символов, а максимальная - количество байт, то это будет нелогично. Я если максимальную тоже сделать количеством символов, это сломает программы, которые используют максимальную ширину для защиты от переполнения буфера.

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
Код: plaintext
1.
 printf("%1.3s", "longsting");
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982925
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
petrav
пропущено...

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
Код: plaintext
1.
 printf("%1.3s", "longsting");


Ничего себе. Я думал это только для плавающей точки. :)
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982932
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
А давайте, для начала, определим ширину строки, в которой печатные символы US-ASCII перемежаются совершенно стандартными управляющими кодами ^H, ^I, ^L и вертикальной табуляции. Вот без всякого юникода и локалей.
Пробежаться по строке и учесть перемещения курсора по \b \t \r \n \f и т.д. - проще пареной репы!
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982963
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В классической консоли из 90х (MS-DOS), табулятор бъёт в следующую позицию кратную восьмёрке.
Тоесть чтоб узнать позицию мы еще должны понимать откуда строка стартовала на экране.

Или что делать с символом бэкспейса? Он должен уменьшать длину строки. Можно и в отрицательную
длину уйти.

Что делать с Арабским письмом которое должно печататься справа-налево? Что делать с ascii-control,
о котором уже спрашивает Василий?

Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982965
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
Ничего! Не считать их.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982974
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Пробежаться по строке и учесть перемещения курсора по \b \t \r \n \f и т.д. - проще пареной репы!
Backspace и Horizontal Tab - требуют дополнительного контекста.
FormFeed и Vertical Tab - вообще создают новые строки и тоже требуют дополнительного контекста.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
mayton
Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
Ничего! Не считать их.

Это прекрасно.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982979
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982987
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?
Если мы говорим о подсчёте знакомест, то "ничего" эквивалентно "не считать их". Это же очевидно!
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982990
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Или что делать с символом бэкспейса? Он должен уменьшать длину строки. Можно и в отрицательную
длину уйти.
Предлагаю нормализовать строку, пропорционально сократив значимые символы и \b, если это возможно. Иными словами, если в строке перед \b встречаются значимые символы, их необходимо убрать пропорционально вместе с \b, так, чтобы вначале строки могли остаться несокращённые \b символы, которых оказалось больше, чем значимых.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982992
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?

Не ничего, а удалять их. :)
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982994
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Не ничего, а удалять их. :)
Удалять их из строки нельзя, так как они нужны для цветового выделения символов при выводе строки на консоль, а вот не считать их при определении кол-ва знакомест - можно.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982997
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Не ничего, а удалять их. :)
Удалять их из строки нельзя, так как они нужны для цветового выделения символов при выводе строки на консоль, а вот не считать их при определении кол-ва знакомест - можно.

А если мне нужно не в консоль, а на GUI или в файл? Тогда нужно логику параметризовать назначением.

А вообще лучше удалять! А управляющие символы выделить в отдельный API.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983024
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, тыж программист! Кому, как не тебе, знать - для чего используется каждый литерал и каждая подготовленная строка в твоей программе? Если ты собираешься выводить строку в какой-нибудь ComboBox, Memo или EditBox, нафига, спрашивается, ты будешь лепить туда управляющие символы для консоли?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983025
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devа вот не считать их при определении кол-ва знакомест - можно.

А ничего, что это байт "К", совершенно неотличимый от соответствующего символа?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983026
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, тыж программист! Кому, как не тебе, знать - для чего используется каждый литерал и каждая подготовленная строка в твоей программе? Если ты собираешься выводить строку в какой-нибудь ComboBox, Memo или EditBox, нафига, спрашивается, ты будешь лепить туда управляющие символы для консоли?

Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983030
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, нет, это символ с кодом 0x1b
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983031
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
Программист передаст туда только то, что считает нужным передать в зависимости от назначения функционала библиотеки. Это же не абстрактный чайник с противоположной стороны Солнца от Земли...
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983032
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
Программист передаст туда только то, что считает нужным передать в зависимости от назначения функционала библиотеки. Это же не абстрактный чайник с противоположной стороны Солнца от Земли...

Тут у нас тема выравнивание по ширине. Как ты предлагаешь выравнивать по ширине если в строке перевод каретки?

Управляющие символы — это костыль. От костылей нужно избавляться. Мы не в MS-DOS.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf() utf8 + выравнивание по ширине
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]