Prosty program w C gubi dane

0

Hej,dostałem zadanie napisać funkcję która z tekstu wyłapuję pierwszą liczbę i zwraca ją w formacie int. Wygląda na to ,że wszystko jest ok,ale program notorycznie co 2,3 cyfry gubi jedna jedność. Tzn dla 23 zwraca 23, ale już dla 234 zwróci 233,a dla np 234567 - 234565 . Zgupiałem już o co chodzi... Pomoże ktoś?

Kod w C:

#include<stdio.h>
#include<math.h>

int my_atoi(char *);

int main()
{
    char tab[100]={"bla bla 23760bla"};
    int num;
    num=my_atoi(tab);
    printf("%d",num);
    getchar();
    return 0;
}
    my_atoi(char tab[100])
{
    int i,j,num_tab[10],sum=0;
    for(i=0;1;i++) if((tab[i]>=48) && (tab[i]<=57)) break;
    for(j=0;(tab[i]>=48) && (tab[i]<=57);i++,j++) num_tab[j]=tab[i]-48;
    for(i=j-1,j=0;i>=0;i--,j++) sum+=num_tab[i]*pow(10,j);

    return sum;
}
 
0

Nie zaobserwowałem tego, ale jeśli miałbym strzelać, to może niedokładność pow i obcięcie double do int robią swoje. Zmień na coś takiego to nie będzie problemu:

int i, j, num_tab[10], sum = 0;
    
for (i = 0; !isdigit(tab[i]); ++i);

for (j = 0; isdigit(tab[i]); ++i, ++j)
    num_tab[j] = tab[i] - '0';
        
for (i = j - 1, j = 1; i >= 0; --i, j *= 10)
    sum += num_tab[i] * j;
1

Uuu.. ale to my_atoi() strasznie skomplikowane! Nie można prościej? Potęgi... po co?
Może wyjdź z czegoś takiego (uwaga nie kompletne... ):

int my_atoi( const char * str )
{
    int val = 0;
    while( *str ) {
        val = val*10 + (*str++ - '0');
    }
    return val;
}
0

Dzięki chłopaki,teraz po paru modyfikacjach działa. Ten drugi kod też byłby spoko gdyby nie to,ż jest nieodporny na np 3 liczby jednoczenie w tekście- nie bierze pierwszej tylko wszystkie 3 i zapisuje jako jedną. A dodając kolejne wAarunki już się nie robi taki prosty :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1