Alex_Golubev 0 26 июня, 2017 Опубликовано 26 июня, 2017 (изменено) · Жалоба Привет. Прям не знаю как так получается. Пишу: sprintf(print_buf,"Доб.вода.....%2.0f%%\n",Water); Где print_buf массив типа char размерностью 32. После получаю: print_buf <array>"Доб.вода..... 0% " 0x20000BC4 char[32] [0] 'Д' (0xC4) 0x20000BC4 char [1] 'о' (0xEE) 0x20000BC5 char [2] 'б' (0xE1) 0x20000BC6 char [3] '.' (0x2E) 0x20000BC7 char [4] 'в' (0xE2) 0x20000BC8 char [5] 'о' (0xEE) 0x20000BC9 char [6] 'д' (0xE4) 0x20000BCA char [7] 'а' (0xE0) 0x20000BCB char [8] '.' (0x2E) 0x20000BCC char [9] '.' (0x2E) 0x20000BCD char [10] '.' (0x2E) 0x20000BCE char [11] '.' (0x2E) 0x20000BCF char [12] '.' (0x2E) 0x20000BD0 char [13] ' ' (0x20) 0x20000BD1 char [14] '0' (0x30) 0x20000BD2 char [15] '%' (0x25) 0x20000BD3 char [16] '\n' (0x0A) 0x20000BD4 char [17] '\0' (0x00) 0x20000BD5 char [18] '\0' (0x00) 0x20000BD6 char [19] '\0' (0x00) 0x20000BD7 char [20] '\0' (0x00) 0x20000BD8 char [21] '\0' (0x00) 0x20000BD9 char [22] '\0' (0x00) 0x20000BDA char [23] '\0' (0x00) 0x20000BDB char [24] '\0' (0x00) 0x20000BDC char [25] '\0' (0x00) 0x20000BDD char [26] '\0' (0x00) 0x20000BDE char [27] '\0' (0x00) 0x20000BDF char [28] '\0' (0x00) 0x20000BE0 char [29] '\0' (0x00) 0x20000BE1 char [30] '\0' (0x00) 0x20000BE2 char [31] '\0' (0x00) 0x20000BE3 char Откуда в 13-й ячейке пробел? Изменено 27 июня, 2017 пользователем Сергей Борщ Исправил орфографию в названии темы и собщении Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 26 июня, 2017 Опубликовано 26 июня, 2017 · Жалоба Двойка в формате "%2.0f" задаёт ширину поля для вывода не менее 2 символов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба А есть возможность убирать этот пробел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба А есть возможность убирать этот пробел? Использовать формат "%1.0f" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба формат "%1.0f" не пойдет так как число состоит из двух знаков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба формат "%1.0f" не пойдет так как число состоит из двух знаков. насколько помню, при нехватке произойдет автоматическое расширение, т.е. 1 показывает минимальную длину печатаемого числа, но не максимальную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба попробуйте %02.0f Отображаться должно 01 (вместо пробела будет ведущий ноль). Могу ошибаться. Если уж совсем не получится - "дообработайте" массив после печати, например замените пробел на тотже 0 == 0x30. ( позиция его в массиве фиксирована - если не менять строку-литерал) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба "дообработайте" массив после печатиЧего народ только не придумает, лишь бы не читать документацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 27 июня, 2017 Опубликовано 27 июня, 2017 · Жалоба Чего народ только не придумает, лишь бы не читать документацию. %-2.0f Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_Golubev 0 28 июня, 2017 Опубликовано 28 июня, 2017 (изменено) · Жалоба А как можно сделать выравнивания текста с правой стороны, а цифр с левой как на магазином чеке? |вода.....100% | |жир......10,56 | |Белок....3,1 | Изменено 28 июня, 2017 пользователем Alex_Golubev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба А как можно сделать выравнивания текста с правой стороны, а цифр с левойВы издеваетесь? Двумя сообщениями выше дал ссылку на полное описание форматной строки printf, даже на русском языке. "Чтение документации из интернета вслух - 100 евро/час": Знак | Название знака | Значение | В отсутствие этого знака - | минус | выводимое значение выравнивается по левому краю в пределах минимальной ширины поля | по правому Количество точек можно выводить как строку из максимально возможного количества точек, смещая адрес начала строки на длину названия: printf("%s%s", item_name[i], "........." + strlen(item_name[i])); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 28 июня, 2017 Опубликовано 28 июня, 2017 (изменено) · Жалоба Не забываем про малоизвестные (но стандартные) коды %n и %*s в разных вариантах. Пример со звездочкой для выравнивания на нужную позицию: static int toprintc(int c) { if (c < 0x20 || c >= 0x7f) return '.'; return c; } void printhex(unsigned long voffs, const unsigned char * buff, unsigned length) { unsigned i, j; unsigned rows = (length + 15) / 16; for (i = 0; i < rows; ++ i) { const int trl = ((length - 1) - i * 16) % 16 + 1; debug_printf_P(PSTR("%08lX "), voffs + i * 16); for (j = 0; j < trl; ++ j) debug_printf_P(PSTR(" %02X"), buff [i * 16 + j]); debug_printf_P(PSTR("%*s"), (16 - trl) * 3, ""); debug_printf_P(PSTR(" ")); for (j = 0; j < trl; ++ j) debug_printf_P(PSTR("%c"), toprintc(buff [i * 16 + j])); debug_printf_P(PSTR("\n")); } } Изменено 28 июня, 2017 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба printf("%s%s", item_name[i], "........." + strlen(item_name[i])); А вот это уже интересно. Респект Сергаю, лайк тому, кто понял как это работает ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 29 июня, 2017 Опубликовано 29 июня, 2017 · Жалоба printf("%s%s", item_name[i], "........." + strlen(item_name[i])); А вот это уже интересно. Респект Сергаю, лайк тому, кто понял как это работает ;) Дизлайк тому, кто такое использует в коде :) Прикольно ведь, когда очередной айтем_нэйм окажется длиннее 9 символов :) Да, да, я понимаю, это для названий пунктов меню, которые все короче 10 символов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skripach 5 6 июля, 2017 Опубликовано 6 июля, 2017 · Жалоба del Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться