реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Изменение типа переменной, как?
WHALE
сообщение Apr 2 2006, 16:47
Сообщение #16


Знающий
****

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



тебе правильно советуют-прочитай вначале книгу по языку,а более-менее разобравшись
с языком,внимательно прочитай хелп к компилятору.И уверен,ты быстро-бы нашел и разобрался-бы
со следующим(хелп кодвижина)
Standard Library Functions-stdlib.h
void itoa(int n, char *str)
converts the integer n to characters in string str.
в общем,все очень просто


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
raider
сообщение Apr 2 2006, 17:27
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 11-05-05
Из: г. Москва
Пользователь №: 4 916



В общем, вот вам самописная функция преобразования числа в строку:
Код
char *int2str(char *buf, int num)
{
    char str[6];
    char *ptr = &str[5];
    int tmp;

    *ptr = 0;

    if (num < 0) {
        *buf++ = '-';
        num = -num;
    }

    do {
        tmp = num / 10;
        *--ptr = '0' + (num - tmp * 10);
        num = tmp;
    } while (num != 0);

    while ((*buf++ = *ptr++) != 0);

    return buf - 1;
}

у себя делаете:
Код
int temp;
char str_buf[7];

temp=10;
int2str(str_buf, temp);
lcd_putsf(str_buf);

естественно, int - 16-и разрядный.
И будет у вас на индикаторе в десятичной системе счисления число за переменной temp.
Go to the top of the page
 
+Quote Post
ps1x
сообщение Apr 2 2006, 17:30
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Действительно, просто надо было юзать поиск....

А вот за функцию огромное спасибо!

з.ы. извините за глупые вопросы...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2006, 18:33
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(raider @ Apr 2 2006, 19:27) *
В общем, вот вам самописная функция преобразования числа в строку:

Заумно, много лишнего.
Код
void int2str( char *buf, int num )
{
char *ptr = buf+5;
*ptr = 0;
    while( num )
    {    *--ptr = num%10 + '0';
          num /= 10;
    }    
    strcpy( buf, ptr );
}

Это просто "по мотивам" цель написать оптимальную не ставилась.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 2 2006, 19:26
Сообщение #20


Знающий
****

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



и при всем этом еще неплохо было-бы для сравнения глянуть на реализацию библиотечной функции.Библиотеки,как правило,не идиоты пишут. cranky.gif


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2006, 19:36
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(WHALE @ Apr 2 2006, 21:26) *
и при всем этом еще неплохо было-бы для сравнения глянуть на реализацию библиотечной функции.Библиотеки,как правило,не идиоты пишут. cranky.gif

1. Далеко не во всех библиотеках есть.
2. Ничего выдающегося там обычно нет - тот-же C, не ASM :-(


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
raider
сообщение Apr 2 2006, 19:48
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 11-05-05
Из: г. Москва
Пользователь №: 4 916



Цитата(zltigo @ Apr 2 2006, 22:33) *
Заумно, много лишнего.
Код
void int2str( char *buf, int num )
{
char *ptr = buf+5;
*ptr = 0;
    while( num )
    {    *--ptr = num%10 + '0';
          num /= 10;
    }    
    strcpy( buf, ptr );
}

А если num = 0? А если num < 0, ведь оно типа int.
В принципе, если это выкинуть из моей функции, то она превратится в вашу smile.gif но, имхо, человеку все-таки надо и 0 отрисовывать и отрицательные значения.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2006, 20:30
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(raider @ Apr 2 2006, 21:48) *
В принципе, если это выкинуть из моей функции, то она превратится в вашу smile.gif

Изменения касаются далеко не исключения отрицательных или 0 значений - нужно - верните, а
таких 'мелочей', как лишний промежуточный буфер, лишняя переменная и лишнее умножение.
Не заметили?
В принципе после рассмотрения конкретного компилятора может оказаться желательным исключение
копирования строки.

Кстати, я думаю, что на этом этапе все кончится strftime()
:-))))


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
ps1x
сообщение Apr 2 2006, 20:46
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Вашему вниманию предлагается следующий кусок кода:
Код
if (blink==1)//для реализации мигания активного параметра
{
itoa(hour,temp);//переводим int в str
if (hour<10){lcd_putsf("\0");lcd_puts(temp);}else{lcd_puts(temp);}//если часов меньше 10 то добавляем перед цифрой часов цифру "0", наверное трабл здесь.
lcd_putsf(":");//Выводим разделитель
itoa(min, temp); //переводим минуты    
if (min<10){lcd_putsf("\0");lcd_puts(temp);}else{lcd_puts(temp);}//если минут меньше 10 то -----""-----
lcd_putsf(":");//разделитель
itoa(sec, temp);      
if (sec<10){lcd_putsf("\0");lcd_puts(temp);}else{lcd_puts(temp);}
}
else {//здесь все тоже самое только, вместо  часов мы выводим "  " - два пустых знака.
lcd_putsf("  ");                                                
lcd_putsf(":");
itoa(min, temp);      
if (min<10){lcd_putsf("\0");lcd_puts(temp);}else{lcd_puts(temp);}
lcd_putsf(":");
itoa(sec, temp);      
if (sec<10){lcd_putsf("\0");lcd_puts(temp);}else{lcd_puts(temp);}
}


По идее он должен выводить время в формате ЧЧ:ММ:СС однако если число минут, часов или секунд меньше десяти он их не выводит вообще например вместо "06:32:09" получится ":32:" huh.gif

Что делать?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 2 2006, 20:49
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ps1x @ Apr 2 2006, 22:46) *
По идее он должен выводить время в формате ЧЧ:ММ:СС
Что делать?

Во! Я же буквально пять минут назад говорил, что к strftime() все приползет :-)
Читайте книжки!!!!!!!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Apr 2 2006, 20:59
Сообщение #26


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата
if (sec<10){lcd_putsf("\0");lcd_puts(temp)

Непонятно - почему если число меньше 10, Вы перед ним выводите не "0", а "\0", то есть не символ "ноль", а символ с нулевым кодом? В этом, скорее всего, проблема.

А вообще, довольно несложно переделать приводившийся Вам код функции, преобразующей число в строку, для того, что бы эта функция сама дополняла нулем числа меньше 10 smile.gif.
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 2 2006, 22:56
Сообщение #27


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(ps1x @ Apr 2 2006, 18:09) *
Так напишите если не лень конечно.


Да пожалуйста:

Код
var
  Str : String;
  Value : integer;

..
   Value := 3545; // Какое-то число
   Str := ''; // очистить строковую переменную

   while (Value <> 0) do
   begin
       Str := chr( value mod 10 + $30) + Str;
       Value := Value div 10;
   end;
Go to the top of the page
 
+Quote Post
ps1x
сообщение Apr 3 2006, 00:31
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



В CVAVR к сожалению, нет функции strftime(), равно как и библеотеки time.h о которой я прочел в интернете (((
Вариант
if (sec<10){lcd_putsf("0");lcd_puts(temp)
почему то тоже не работает, хотя с виду должен...
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Apr 3 2006, 07:17
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Совет можт быть не очень к месту, но попробуйте отказаться от CV.
Есть WinAVR и IAR, которые максимально придерживаются стандарта С,
CV и другие упрощены и скорее предназначены для быстрого старта, чем для серьезной работы.
По сути - создать структуру time и выводить ее посимвольно.
Если есть putstr(), то по идее должна быть и putchar().

Сообщение отредактировал beer_warrior - Apr 3 2006, 07:18


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Apr 3 2006, 08:41
Сообщение #30


Знающий
****

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



Для целей формирования строки вывода на жки лучше подходит фукция sprintf()-форматированный вы-
вод в строку.Например sprintf(buf_indiс," %02.0u%c%02.0u%c%02.0u >>",CHAS,':',MIN,':',SEK);
Находится в stdio.h,в хэлпе описывается в Standard C Input/Output Functions.
А так-же в любой книжке по С в главе с одноименным названием.Одно но-прожорлива,зараза, sad.gif но очень удобна.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 22:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016