Использование Sprintf() для левой строки?
Я занимался этим весь день, и никак не могу понять, как использовать sprintf() для установки ширины строки, чтобы мои символы были выровнены по правому краю.
Что я пытаюсь сделать, так это сдвинуть вывод вправо на сенсорном экране, когда значение положительное.
Моя выходная строка всегда имеет предсказуемую длину, поэтому кажется, что это должно быть легко.
Я попытался объединить строку только с пробелом в ней и любым другим способом, который я мог придумать, чтобы добавить пробел в начало моей строки. Не повезло.
char stringval[8] = 1.08;
char juststringval[8];
if (hashpos > 0 && hashpos < 10) {
sprintf(juststringval, " %5s" , stringval);
Serial.println(juststringval);
}
вывод:
1.08 (no spaces in front)
Если вам интересно, почему мне нужно использовать строку, мой сенсорный экран будет печатать с плавающей запятой, но моя библиотека не будет вращать их должным образом.
Только строки можно поворачивать так, как мне нужно.
Разве нет простого способа сделать это?
ИЗМЕНИТЬ:
Кажется, я могу использовать трюк с шириной, если я добавляю какой-то символ помимо пустого места.
Например:
void setup()
{
char stringval[33] = "1.08";
char juststringval[33];
char space[] = "rr"; ////ЭТО РАБОТАЕТ: ВЫВОД 1.08 rr
float hashpos = 1.08;
if (hashpos > 0 && hashpos < 10) {
sprintf(juststringval, "%s %7s", space, stringval);
Serial.println(juststringval);
}
}
void setup()
{
char stringval[33] = "1.08";
char juststringval[33];
char space[] = " "; ////ЭТО НЕ РАБОТАЕТ. ВЫВОД 1.08 ЛЕВЫЙ ОБОСНОВАН
float hashpos = 1.08;
if (hashpos > 0 && hashpos < 10) {
sprintf(juststringval, "%s %7s", space, stringval);
Serial.println(juststringval);
}
}
Но я не могу жить с другими символами в своей строке.
Я могу что-то сделать?
1 ответ
Ошибка, о которой идет речь и в комментариях (кроме комментария Bigoldsofty), заключается в отсутствии символа для оправдания. Этот символ должен быть в строке формата перед требуемой шириной. "% 5s"
не "%5s"
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- DateTime в строку
- Как преобразовать строку в массив байтов
- Как отправить строку на мастер с помощью i2c
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
Правильное обоснование используется по умолчанию. Вы пытались напечатать другую строку над или под ней для сравнения?, @Ignacio Vazquez-Abrams
Да и по умолчанию левая выравнивание. Когда вы печатаете что-то на новой строке, оно начинается слева, как слова на странице., @LegitimateWorkUser
Будет ли это работать, если вы предоставите строку с левым дополнением?, @Ignacio Vazquez-Abrams
Нет, это всегда как можно дальше влево. Как в моем последовательном порту, так и на моем сенсорном экране. Даже если я искусственно вставлю пробелы в "stringval", @LegitimateWorkUser
Печать обычно начинается слева, но в пределах поля, описанного спецификацией формата -
%5s
в вашем случае строка будет выровнена по правому краю в этом 5-символьном поле (при условии, что строка состоит из 5 символов или меньше). Насколько широкий у вас экран? Если вы пытаетесь выполнить выравнивание по правому краю до ширины 20-символьного экрана, f/ex, вам понадобится (20+1) символьный буфер и выполните:sprintf(buffer, "%20s", stringval ); Serial.print(buffer);
Это напечатает строку из 20 символов, дополненную пробелом слева, заканчивающуюся вашим «stringval»., @JRobertМой текст начинается с определенной координаты пикселя на экране. Всякий раз, когда в моем выводе отсутствует знак минус, мне нужно дополнительное пространство. Но я говорю, что этот метод не работает. Как в моем последовательном порту, так и на моем сенсорном экране вывод всегда максимально левый. И, к сожалению, мне не сойдет с рук изменение начальной координаты., @LegitimateWorkUser
Функции xxprintf() не знают об алгебраических знаках (или любых других числовых функциях) в строках. Для этого вам нужно будет выполнить преобразование в строку из некоторого числового формата, который соблюдает соглашение (минус или пробел) для печати знаков. Что касается правильного выравнивания, я только что запустил ваш код, настроил ширину поля и распечатал его в окне терминала Arduino IDE. Вывод действительно сместился дальше вправо с большей шириной поля..., @JRobert
... Тем не менее, я сначала протестировал его в Eclipse, чей терминал использует шрифт переменной ширины, а пробелы были достаточно малы, чтобы не иметь большого значения. С терминалом Arduino IDE и шрифтом фиксированной ширины это было гораздо более очевидно., @JRobert
@JRobert- В настоящее время я использую Visual Micro для Visual Studio. И моя проблема не в обнаружении знака минус. Это не связано. Но мне интересно, если это просто причуда моего последовательного монитора., @LegitimateWorkUser
Это БЫЛО причудой моего серийного монитора., @LegitimateWorkUser
Я только что попробовал, и, к моему удивлению, строка формата «% 5s» фактически печатает начальные пробелы, если строка короче 5 символов., @Bigoldsofty