masterpc 0 17 января, 2008 Опубликовано 17 января, 2008 (изменено) · Жалоба Подскажите, что может быть: Пишу вот так: byte k; while(k=0, k<9, k++) sens[0][k]=0xff; Ничего в массив не пишется, а если написать так: sens[0][0]=0xff; sens[0][1]=0xff; sens[0][2]=0xff; sens[0][3]=0xff; sens[0][4]=0xff; sens[0][5]=0xff; sens[0][6]=0xff; sens[0][7]=0xff; sens[0][8]=0xff; - то все ок. на самом деле такого не нужно в проге, это я с глюком разобраться не могу. Спасибо! Изменено 17 января, 2008 пользователем masterpc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба А как сам массив описан? IAR особенно при включенной оптимизации, если массив больше не используется может выкинуть присавивание... помогает volatile Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSB 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба У меня в IAR 3.42A правильно работает так: int k; k = 0; while(k < 9) { sens[0][k] = 0xff; k++; }; В цикле while (выражение) инструкция вычисляется выражение. Если его значение отлично от нуля, то выполняется инструкция, и вычисление выражения повторяется. Этот цикл продолжается до тех пор, пока выражение не станет равным нулю, после чего вычисления продолжатся с точки, расположенной сразу за инструкцией. Brian W. Kernighan, Dennis M. Ritchie The C programming Language Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба Подскажите, что может быть: Пишу вот так: byte k; while(k=0, k<9, k++) sens[0][k]=0xff; Ничего в массив не пишется, По смыслу должно быть for ( k=0; k<9; k++) sens[0][k] = 0xff; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masterpc 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба Вот такая запись помогла: byte k=0; while(k<9){ sens[0][k]=0xff; k++; } Видно это из-за двухмерного массива, потому как запись while (k=0, k<9, k++) инструкция; тоже верна, но для одной инструкции. По крайней мере с одномерным массивом все нормально. Всем спасибо за помощь!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба Вот такая запись помогла: byte k=0; while(k<9){ sens[0][k]=0xff; k++; } Видно это из-за двухмерного массива, потому как запись while (k=0, k<9, k++) инструкция; тоже верна, но для одной инструкции. По крайней мере с одномерным массивом все нормально. Всем спасибо за помощь!!!! VladimirYU ПРАВ! у вас , вместо ; это очень грубая ошибка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masterpc 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба VladimirYU ПРАВ! у вас , вместо ; это очень грубая ошибка С ";" компилятор ругается, но это уже не важно, главное, что работает , ведь самая правильная прога это та, которая работает :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSB 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба С одномерным массивом Ваш вариант "while (k=0, k<9, k++) инструкция;" тоже не будет работать, не от размерности массива зависит условие выполняемости цикла. Для while: (k=0, k<9, k++) - это все 0, т.е. инструкция не выполнится (k=0, k<9, ++k) - а это будет 1 Пишите нормальные конструкции и Вас все будет работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба С ";" компилятор ругается, но это уже не важно, главное, что работает , ведь самая правильная прога это та, которая работает :) Конечно ругается, потому что там еще и for должен быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба (k=0, k<9, ++k) - а это будет 1 И в итоге бесконечный цикл... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CSB 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба >И в итоге бесконечный цикл... Именно. Я же не сказал что эта конструкция рабочая, я просто показал что нужно для выполнения тела цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 129 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба Конечно ругается, потому что там еще и for должен быть.Зато совсем скоро мы сможем услышать, что циклы for() применять нельзя, потому что они "глючат", а надо while(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба Когда я быстро просматривал текст строчки byte k; while(k=0, k<9, k++) sens[0][k]=0xff; мой глаз воспринял как byte k; for(k=0; k<9; k++) sens[0][k]=0xff; Что у меня и вызвало удивление, в IAR такая конструкция может не работать из-за оптимизации если значения не используются потом... Судя по всему именно это и хотел сказать автор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба С ";" компилятор ругается, но это уже не важно, главное, что работает , ведь самая правильная прога это та, которая работает :) Судя по всему автор так и не понял, какую он ахинею написал :) Попробую разъяснить еще раз, хотя уже вроде бы все написано. while (k=0, k<9, k++) инструкция; Такая конструкция вполне допустима исходя из синтаксиса языка Си, но она не имеет смысла. Применение запятых в условии цикла while говорит о следующих друг за другом условиях. Компилятор будет делать следующее: 1. присвоит значение k=0 2. проверит условие k<9, оно будет истинным - true 3. проверит значение k, оно будет ложным (k=0), и тело цикла не будет выполняться ни разу 4. увеличит значение k++, посколько постинкремент А правильная конструкция, как уже написали: for (k=0; k<9; k++) инструкция; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masterpc 0 17 января, 2008 Опубликовано 17 января, 2008 (изменено) · Жалоба А правильная конструкция, как уже написали: for (k=0; k<9; k++) инструкция; Виноват , сам уже потом понял. Я и раньше так писал, но забыл. Спасибо! Изменено 17 января, 2008 пользователем masterpc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться