Страница 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], не разобравшись, в чем ошибка.
У меня этот код заработал. Правда, когда я его набирал, я совершенно машинально ввел одну лишнюю строку...

- строку, в которой инициализируется переменная 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, и будет Вам счастье. Получите массу удовольствий вроде пошаговой отладки и просмотра переменных по ходу дела...