Я бобер хитрый и вывел значение которое должно отображать количество сотен. Значение равно 11, такого символа в таблице нет и по этому выводит мусор. Надо определить почему вылазит эта единица, потому как верное значение должно быть 10 при числах меньших 100. Если число больше или равно сотни происходит обнуление 10 и в последствии при пересчете в нее записывается единица. В моем случаем в фукцию засылается сначало ноль, потом единица, два, три, четыре - нигде сотни нет, нет даже числа больше десяти. Надо понять откуда она берется эта сотня.
Я нашел ошибку. Смотрим внимательно на цикл Если число отправляется меньше десяти что происходит: eds=1, это как раз то что мы записали в память
Сам цикл
unsigned char mas_eds[4]={10,10,10,10};
if(eds>=100) mas_eds[0]=0; //Сотни if(eds>=10) mas_eds[1]=0; //Десятки if(eds!=0) mas_eds[2]=0; // Единицы if(eds==0) mas_eds[2]=0;
for(i=0; i<eds; i++) // ноль меньше единицы выполним один раз { mas_eds[2]++; // записали в единицы значение один if(mas_eds[2]==10){mas_eds[2]=0; mas_eds[1]++;} //Значение единиц равно единице, не десять... пропускаем if(mas_eds[1]==10){mas_eds[1]=0; mas_eds[0]++;} //И вот эврика!!! - Значение десятков равно то десяти, мы же десятки не обнулили и мы получем... десятки ноль, сотни равны одиннадцати. На выходе имеем *01_*02 * - мусор, это одиннадцать сотен 0 - это обнуленные десятки _ - это пробел, его не видно
Я дурак и гений в одном флаконе. =) Константы я ведь писал все не меньше десяти =) }
Сделал изменения:
if(mas_eds[1]==10){mas_eds[1]=0; mas_eds[0]++;} заменил на: if(mas_eds[1]==10 && eds>=10){mas_eds[1]=0; mas_eds[0]++;} И все зарабатало великолепно НУ что друзья. До следующего гемороя. Всем респект. Еще спишемся
Сообщение отредактировал lomtev - Sep 27 2007, 20:47
|