Страница 1 из 1

Почему не работает такой простой кусочек кода???

Добавлено: Ср июл 16, 2008 12:40:27
megasvintus
На сайте код отображается некорректно. Смотрите приложенное изображение к посту 3



Это функция заполнения массива для отображения цифр, я попытался усовершенствовать ее чтобы лишние нули отсекались сразу, for (i=2;i>=0;i--) это начинаем с крайнего правого элемента массива
if ((i!=2)&&(ind_temp==0)) если разряд не крайний справа, и индицируемое число равно нулю, то вписываем в массив код пустого места 10

если это не так, то отображаем то что есть

Почему-то этот кусок кода во все элементы массива digit_out для отображения вписываает пустые места digit_out=10
Я делал по-другому-все прекрасно пашет. Захотел рациональнее, и уже второй день непонятно почему это не работает

В чем я ошибся?

Добавлено: Ср июл 16, 2008 13:04:10
delay
В чем пишите?
if((indication <999>=-999)) такая запись допустима?

Добавлено: Ср июл 16, 2008 13:32:23
megasvintus
В CVAVR. это допустимо и работает. если число более 999 и менее -999 то сразу исполняются строчки, отображающие Err. тут все в порядке. На вышеуказанный участо кода компиллятор не ругается вообще. ни warning ни errors


Это баг сайта. я вставляю вот какой текст:

Добавлено: Ср июл 16, 2008 13:32:32
Shapa
Если я всё верно понял, вы пишите в Сях. Посему любой код очень легко можно проверить, подправте его чуть-чуть и запихните Visual Studio(или Borlan C). И в режиме дебага вы сможите найти ответ на любой вопрос(конечно если в вашей программной среде присутствует собственный дебагер, что вас останавливает? :)) )

Добавлено: Ср июл 16, 2008 13:35:06
megasvintus
Расскажите пожалуйста что я не так написал, а не отправляйте в дебаггер. Для того я сюда и пришел.

Я новичок. Вот и спрашиваю почему он во все элементы массива рисует пустшки. Не исполняет этот участок:

else {
digit_out= ind_temp%10; // находим остаток
ind_temp/=10; //делим на 1
};

Добавлено: Ср июл 16, 2008 16:12:15
Пухич
Он вообще не заходит в этот участок кода, или просто неверно его исполняет? Можно это проверить как-то? Воткнуть в этот участок вывод куда-нибудь чего-нибудь например?

Добавлено: Ср июл 16, 2008 17:42:19
ARV
поглядите же на мой вариант вывода чисел: я приводил в своей статье исходники, которые и пустое место вместо левых нулей делают, и тому подобное... заодно сравните со своей методой...

Добавлено: Ср июл 16, 2008 22:32:58
megasvintus
Всё! Сделал. Работает. гасит ненужные нули, отображает где нужно минусы. Получилось даже проще и короче чем ваш вариант! Но в моем конечно же процентов 80 вашего :)) Спасибо!

Добавлено: Ср июл 16, 2008 22:36:33
Пухич
И в чем же был косяк?

Добавлено: Чт июл 17, 2008 01:25:40
megasvintus
А фиг знает... этот кусок кода достал до такой степени, что сделал так:
ctrl+a затем del

Написал заново, с учетом новых мыслей.

Слепо копировать чужое не хочу. Нужно понимать каждый символ.
Многие моменты конечно подглядываю, но потихоньку всё больше пишу сам

Добавлено: Чт июл 17, 2008 07:37:50
delay
Ну так приведите полученный код. Люди вникали в ваш вопрос, им же интересно посмотреть результат. А то получается заседание без банкета :)

Добавлено: Чт июл 17, 2008 07:43:30
ARV
megasvintus писал(а):Но в моем конечно же процентов 80 вашего...
....Слепо копировать чужое не хочу. Нужно понимать каждый символ.
Многие моменты конечно подглядываю, но потихоньку всё больше пишу сам
100% правильный подход в обучении! так и продолжайте, и постепенно ваши 20% станут восемьюдесятью для других :)

Добавлено: Чт июл 17, 2008 10:02:03
Yellow Tiger
ARV писал(а):так и продолжайте, и постепенно ваши 20% станут восемьюдесятью для других :)
Это произойдет значительно быстрее, если не нажимать [Ctrl-A] + [Del], не разобравшись, в чем ошибка. :)

У меня этот код заработал. Правда, когда я его набирал, я совершенно машинально ввел одну лишнюю строку... :lol: - строку, в которой инициализируется переменная ind_temp:

Код: Выделить всё

        ind_temp = indication;

        for (i=2; i >= 0; i--)
        {
            if ( (i != 2)&&(ind_temp == 0) ){
                    ...
Полностью рабочий код, хотя и неоптимальный - согласен.
Пара советов - не пренебрегай отступами, используй префиксный, а не постфиксный инкремент/декремент, если не используешь то значение, которое имеется до операции - некоторые компиляторы генерят лишний код, если видят такое - думают, что нужны оба значения - и то, что ДО, и то, что ПОСЛЕ.

Добавлено: Чт июл 17, 2008 12:34:43
Барсик
megasvintus писал(а):Расскажите пожалуйста что я не так написал, а не отправляйте в дебаггер...
Дык, дебаггер для того и придуман, чтобы решать подобные проблемы. Прицепите к CVAVR в качестве дебаггера AVR Studio, и будет Вам счастье. Получите массу удовольствий вроде пошаговой отладки и просмотра переменных по ходу дела...