|
|
  |
звпутался с переменными |
|
|
|
Oct 12 2010, 21:55
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686

|
Код lcd_gotoxy(10, 1); if(sec==60){ min++; sec=0; itoa(min,mv); }; itoa(sec,sv); sec++; lcd_puts(mv); lcd_putchar(':'); lcd_gotoxy(13, 1); lcd_puts(sv); нучто чтобы выводило в формате min:sec а выводит только sec:sec на дисплей, почему?
|
|
|
|
|
Oct 12 2010, 22:14
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Еще бы знать из какой библиотеки используемые функции Операцию Код itoa(min,mv); нужно перенести, разместив ее после блока проверки условия. Иначе у вас переменная минут преобразуются в символьный вид только один раз в минуту, а не каждый раз при выводе времени. Отсюда и "растут ноги" вашей ошибки "sec:sec".
|
|
|
|
|
Oct 12 2010, 22:25
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686

|
Цитата(rezident @ Oct 13 2010, 02:14)  Еще бы знать из какой библиотеки используемые функции Операцию Код itoa(min,mv); нужно перенести, разместив ее после блока проверки условия. Иначе у вас переменная минут преобразуются в символьный вид только один раз в минуту, а не каждый раз при выводе времени. Отсюда и "растут ноги" вашей ошибки "sec:sec". вот библиотеки #include <mega48.h> // Alphanumeric LCD Module functions #include <alcd.h> #include <stdlib.h> #include <delay.h> вынес за пределы блока проблема все равно осталась...sec:sec
|
|
|
|
|
Oct 13 2010, 04:05
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
в stdlib.h функция itoa объявлена так Код extern char *itoa(int __val, char *__s, int __radix); а у вас в вызове ее не хватает еще одного параметра. И покажите как у вас объявлены mv и sv.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Oct 13 2010, 14:41
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(dimka76 @ Oct 13 2010, 08:05)  а у вас в вызове ее не хватает еще одного параметра. мне разные itoa встречались... Цитата(AnKing @ Oct 13 2010, 01:55)  ...почему? Какой компилятор используете, небось CV?
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 13 2010, 20:27
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686

|
обьявлял так Код char *sv="",*mv=""; int sec=0,min=0; Вылечил, преобразуя в текст непосредственно перед выводом на экран Но все равно ен понимаю почему itoa загоняет значения по одному адресу вне зависимости от названия переменных... Код itoa(min,mv); lcd_puts(mv); lcd_putchar(':'); lcd_gotoxy(13, 1); itoa(sec,sv); lcd_puts(sv); Использую CV...он прост как дримвейвер и встроенный программатор это конеч удобно. Хотя я бы не прочь освоить чтонить другое.... что посоветуете? IAR?
Сообщение отредактировал AnKing - Oct 13 2010, 20:29
|
|
|
|
|
Oct 13 2010, 20:45
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(rezident @ Oct 13 2010, 23:37)  Дык mv и cv у вас указатели, а где сами буферы-то, указатели на которые вы передаете в itoa и lcd_puts? Указатели, и инициализированы адресами массивов размером... 1 байт ( ="" ). А поскольку такого массива явно не хватает для результата itoa - каждый itoa вылезает за пределы массива и затирает следующие за ним переменные. Надо бы инициализировать либо строкой из хотя бы двух пробелов ( ="<пробел><пробел>") или явно указать размерность массива (не забыв о дополнительном байте для завершающего строку нуля): Код char sv[3], mv[3];
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 13 2010, 21:08
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 2-02-08
Пользователь №: 34 686

|
Цитата(Сергей Борщ @ Oct 14 2010, 00:45)  Указатели, и инициализированы адресами массивов размером... 1 байт ( ="" ). А поскольку такого массива явно не хватает для результата itoa - каждый itoa вылезает за пределы массива и затирает следующие за ним переменные. Надо бы инициализировать либо строкой из хотя бы двух пробелов ( ="<пробел><пробел>") или явно указать размерность массива (не забыв о дополнительном байте для завершающего строку нуля): Код char sv[3], mv[3]; Спасибы сергей... все понято )
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|