Problem z wywołaniem funkcji

0

Witam. Piszę pewien program w języku c, który ma stwierdzać czy tekst jest liczbą i zamieniać go na system dziesiętny, jeśli jest w innym systemie. Mam kłopot z wywołaniem funkcji, która konwertuje na system dziesiętny. Nie wiem, gdzie popełniłem błędy, bo wszystko się kompiluje. Jeśli ktoś mógłby pomóc, byłbym bardzo wdzięczny. Oto fragment kodu:

struct Liczba {
    char tekst[100];
    char bity;
    };


int DwojDzies(char *wskT,int d)
{
	int wartosc=0,i;
   for(i=2; i<d; i++)
    {
        wartosc=wartosc*2+wskT[i];
    }
    
    return wartosc;
    printf("%d",wartosc);
}
 
 
int OsemDzies(char *wskT,int d)
{
    int wartosc=0,i;
   for(i=1; i<d; i++)
    {
        wartosc=wartosc*8+wskT[i];
    }
    
    return wartosc;
    printf("%d",wartosc);
    }
    
 
int SzesnDzies(char *wskT,int d)
{
    int wartosc=0,i;
   for(i=2; i<d; i++)
    {
        switch(wskT[i])
        {
           
            case 'a': wskT[i]=10; break;
            case 'A': wskT[i]=10; break;
            case 'b': wskT[i]=11; break;
            case 'B': wskT[i]=11; break;
            case 'c': wskT[i]=12; break;
            case 'C': wskT[i]=12; break;
            case 'd': wskT[i]=13; break;
            case 'D': wskT[i]=13; break;
            case 'e': wskT[i]=14; break;
            case 'E': wskT[i]=14; break;
            case 'f': wskT[i]=15; break;
            case 'F': wskT[i]=15; break;
        }
    
        wartosc=wartosc*16+wskT[i];
    }
    
    return wartosc;
    printf("%d",wartosc);
        
}


void ZamienNaSystemDziesietny(struct Liczba *wsk)
{
	int d;
    OdczytajzPlikuTekstowego(wsk);
    d=strlen(wsk->tekst);
    
if (CzyLiczba(wsk->tekst,d)==1)
    {
      if (CzySzesnastkowa(wsk->tekst,d)==1)
          SzesnDzies(wsk->tekst,d);
      if (CzyOsemkowa(wsk->tekst,d)==1)
          OsemDzies(wsk->tekst,d);
      if (CzyDwojkowa(wsk->tekst,d)==1)
          DwojDzies(wsk->tekst,d);
    }
    
   
}

int main(int argc, char** argv)
{   
 struct Liczba l;
ZamienNaSystemDziesietny(&l);

return 0;
}
0
wartosc=wartosc*2+(wskT[i] - '0');

Analogicznie w pozostałych funkcjach.

0

Można to trochę skrócić:

case 'a':
            case 'A': wskT[i]=10; break;
            case 'b':
            case 'B': wskT[i]=11; break;
            case 'c':
            case 'C': wskT[i]=12; break;
            case 'd':
            case 'D': wskT[i]=13; break;
            case 'e':
            case 'E': wskT[i]=14; break;
            case 'f':
            case 'F': wskT[i]=15; break;

Albo użyć funkcji sscanf().

0

To i tak nie pomogło :(

0

A co się dzieje, że nie działa? Opisz problem.

0

Teksy są wypisywane z pliku. Są sprawdzane pod kątem tego, czy są liczbą i w jakim systemie. Jeśli są liczbą w innym systemie to powinny być zamieniane na dziesiętny i właśnie ta część nie działa wcale. Po prostu nic się nie wyświetla.

0

Nic się nie wyświetla, ponieważ printf("%d",wartosc); znajduje się po return wartosc;, czyli wychodzisz z funkcji zanim coś wyświetlisz. Nie zapomnij też o radzie gazara.
Swoją drogą powinieneś się zdecydować, czy w procedurach zamieniających systemy chcesz wyświetlać wartość, czy ją zwracać. Jednoczesne zwracanie i wyświetlanie może wprowadzać zamieszanie w kodzie (a przynajmniej mi jest to trudniej zrozumieć).

0

Dziękuję. Jeszcze jedno pytanie. Co powinienem zastosować przy wczytywaniu tekstu z pliku, aby można było po każdym jego wyrazie zastosować komentarz. Próbowałem funkcji fscanf, ale nawet po zapętleniu do warunku (feof(plik)==0) wyświetla jedynie ostatni wyraz tyle razy, ile jest ich wszystkich.

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