Увеличить определенный символ в строке
- Войдите на сайт для отправки комментариев
Чт, 23/03/2017 - 12:59
Всем привет!
Заморочился с такой проблемой и теперь немогу побороть ее:
Необходимо менять число по разрядам, например есть
setPosition = 1234
надо по кнопке увеличить/уменьшить определенный разряд в общем числе (возьмем разряд my_pos=2 - сотни),
этот код не совсем рабочий
switch(my_pos){ // в зависимости от индекса увеличиваю на единицы, десятки, сотни, тысячи case 1: setPosition += 1000; if (setPosition > 9999) setPosition -= 10000; break;// тысячи case 2: setPosition += 100; if (setPosition > 999) setPosition -= 1000; break; // сотни case 3: setPosition += 10; if (setPosition > 99) setPosition -= 100; break; // десятки case 4: setPosition += 1; if (setPosition > 9) setPosition -= 10; break; // единицы }
но предположим если число превышает 9 он должно равняться 0. а следующий разряд не должен увеличиваться.
Надеюсь понятно объяснил
пробовал число преобразовывать в char и менять по нужному индексу, но тоже как-то криво получается.
А тип setPosition?
Извиняюсь, int setPosition
byte my_pos
вот так пробовал через char setPosition=1357
само преобразование на мой взгляд не очень красивое и на 8 шаге должно было получиться
1367, но почемуто выдает 13576
Смотрите размерность типа char
но предположим если число превышает 9 он должно равняться 0. а следующий разряд не должен увеличиваться.
Второй вариант как раз это и делает. пока разбираюсь как измененную цифру обратно запихнуть.
Мы знаем длину строки (именно строки, в которой то, что отображается на экране, а не числа, которое из этой строки получается), мы знаем позицию. Можно тупо менять в буфере нужную позицию.
'1' + 1 = '2'
'2' + 1 = '3'
и т.п. И, конечно же после изменения числа, нужно его отобразить, чтобы изменение было видно.
Данный код увеличит цифру в позиции 2 (счет с нуля) и отобразит число "1244".
Второй вариант как раз это и делает. пока разбираюсь как измененную цифру обратно запихнуть.
Пример.
Спасибо, оба варианта хорошие,
но второй вариант мне больше нравится т.к. нет преобразований
только вот ругается на
if
(*number > 9999 || index = 0 || index > 4)
return
;
пишет "lvalue required as left operand of assignment"
все разобрался
if
((*number > 9999) || (index = 0) || (index > 4))
return
;
Так уберите assignment и поставьте нормальное сравнение. Это очевидная опечатка. Вы, похоже, не понимаете. что в этом коде написано. Так?
все разобрался
if
((*number > 9999) || (index = 0) || (index > 4))
return
;
Нет, не разобрался. Похоже, действительно не понимаете.
Да! Забыл добавить, что критики могут идти в жопу... ну ка всегда. ;)
Пришлось поправить
в принципе if тоже можно убрать
Пишут printf сильно нагружает ардуину, но вариант клевый.
printf() не от ардуины, а для примера. Какая связь ардуины и printf() в Вашем варианте мозгового вещества?
---------------
* откуда ж вы все в программирование лезете, и, главное, за каким хером?
Полагаю в Ардуино используется эта функция sprintf()
вот например что про нее пишут:
Конвертирование данных в строку с помощью функции sprintf.
Это самый удобный, универсальный метод. Недостаток такого способа заключается в том, что функция sprintf просто пожирает ресурсы микроконтроллера. В критичных по времени и объему памяти приложениях ее лучше не применять.
int sprintf( char *string, const char *format , argument1, argument2 ... )
судя по этому "Да! Забыл добавить, что критики могут идти в жопу... ну ка всегда. ;)" У вас наверное мания величия.
Я например владею 5 языками программирования, а ардуино занимаюсь время от времени ради удовольствия. Но спорить не собираюсь. Вам гуру виднее.
да причеи тут строки? Вы слепой или туповаты? Я вам макросы написал для целых чисел. Не для строк.
Не нужно брехать про 5 языков, если Вы мудацкие вопросы задаете. Тут не дети сидят, а старые дядьки.
Письками меряться со мной не стоит точно, мне 47 лет, очень хорошее образование и очень плохой характер.
Человек, задавший на форуме дурацкий вопрос - уже, по определению, унизил себя. Нехера после этого рот разевать, тут не госдума, чтобы дискутировать.
Либо слушайте, что говорят, и кланяйтесь, либо сразу нахер.
Дискуссия тут у него, итить в сраку!
характер - да.
Мы знаем длину строки (именно строки, в которой то, что отображается на экране, а не числа, которое из этой строки получается), мы знаем позицию. Можно тупо менять в буфере нужную позицию.
'1' + 1 = '2'
'2' + 1 = '3'
и т.п. И, конечно же после изменения числа, нужно его отобразить, чтобы изменение было видно.
Данный код увеличит цифру в позиции 2 (счет с нуля) и отобразит число "1244".
)))
Что, kisoft, убедились что короткий верный код новичкам не нравится? Они его не понимают и тупо игорят, как бы его и небыло! Они не верят что их сверхсложную задачу (понятно суперсложную ИИ вобще отдыхает) можна в 3 строки решить )))
Вот если бы классы позабористей, да оптронов побольше)))
Дикари-с...
ПС. спасибо, поржал..
Фигасе!
Я например владею 5 языками программирования
и от того же автора
только вот ругается на
if
(*number > 9999 || index = 0 || index > 4)
return
;
пишет "lvalue required as left operand of assignment"
все разобрался
if
((*number > 9999) || (index = 0) || (index > 4))
return
;
Херасе!
И ведь человек настолько "владеет", что даже не понимает комизма ситуации!
Вы уж больше никому такого не говорите, а то ведь все куры со смеху передохнут, а импортировать нельзя - санкции, итти их ...
Я понимаю, что теперь к концу работы можно и поржать.
И в чем проблема то? Вставил код, не пошло, и сразу его поравил. Ну и отписался раньше положеного.
Ваш код помог, но такие ошибки (index = 0) тоже можно на лузера списать.
Пришлось поправить
Прошу прощение за допущенные досадные ошибки.
При допустимых значениях входные аргументов проверка не нужна.
Если эту строку закоментировать,
то значения index должны быть от 0 до 3, а не от 1 до 4.
В конце функции допустил еще одну ошибку. Планировалось так: