Problem jest w działaniu (cyfra1 * 10000). Ponieważ cyfra1 jest typu int, to całe wyrażenie też jest typu int. Gdy cyfra1=3, nie ma problemu, bo wartość wyrażenia (cyfra1 * 10000) wynosi 30000 i miesci sie w zakresie int, tzn od -32,768 to 32,767. Ale gdy cyfra1=4, to wyrażenie (cyfra1 * 10000) ma wartość 40000 i jest poza zakresem.
A dokładnie, to wyrażenie jest obliczane i ma wartość 40000, ale jest konwertowane do typu int i ma wartość ujemną (-25536).
Zmiana typu z int cyfra1 = 0; na unsigned int cyfra1 = 0; rozwiązuje problem (przynajmniej dla 40000).
Poza tym ten algorytm jest mało efektywny, bo wielokrotnie powtarza te same operacje. Propozycja kolegi evill jest dużo lepsza. Mogłoby wyglądać to tak
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
sq5rix napisał(a):
Nie używamy float w mikrokontrolerach. Wyskakujesz działaniem poza zakresy liczb int chyba na moje oko...
Słuszna uwaga i dobre oko.