2013-03-28 2 views
0

Я пытаюсь преобразовать шестнадцатеричное число в десятичное число. Что я придумал до сих пор:C, конвертировать шестнадцатеричное число в десятичное число без функций

#include <unistd.h> 
#include <stdio.h> 

long convert(char *input, short int *status){ 
    int length = 0; 
    while(input[length]) 
    { 
     length++; 
    } 
    if(length = 0) 
    { 
     *status = 0; 
     return 0; 
    } 
    else 
    { 
     int index; 
     int converter; 
     int result = 0; 
     int lastNumber = length-1; 
     int currentNumber; 
     for(index = 0; index < length; index++){ 
      if(index == 0) 
      { 
       converter = 1; 
      } 

      else if(index == 1) 
      { 
       converter = 16; 
      } 

      else{ 
       converter *= 16; 
      } 
      if(input[lastNumber] < 45 || input[lastNumber] > 57) 
      { 
       *status = 0; 
       return 0; 
      } 
      else if(input[lastNumber] > 45 && input[lastNumber] < 48) 
      { 
       *status = 0; 
       return 0; 
      } 

      else{ 
       if(input[lastNumber] == 45) 
       { 
        *status = -1; 
        return result *= -1; 
       } 
       currentNumber = input[lastNumber] - 48; 
       result += currentNumber * converter; 
       lastNumber--; 
      } 
     } 
     *status = -1; 
     return result; 
    } 
} 

int main(int argc, char **argv) 
{ 
    char *input=0; 
    short int status=0; 
    long rezult=0; 
    if(argc!=2) 
    { 
     status=0; 
    } 
    else 
    { 
     input=argv[1]; 
     rezult=convert(input,&status); 
    } 

    printf("result: %ld\n", rezult); 
    printf("status: %d\n", status); 


    return 0; 
} 

Как-то я всегда получаю resoult 0. Ia я также не разрешается использовать любые другие функции, наружные видные (кроме Printf). Что может быть неправильным с моим кодом выше?

+2

Это немного сложнее понять код, который не использует английский для своих имен. :/ – unwind

+0

Если это поможет, я могу перевести код на английский. – NejcZ

+0

Здесь я перевел несколько слов, надеюсь, что это поможет! – NejcZ

ответ

2

Это:

if(dolzina = 0) 
{ 
    *status = 0; 
    return 0; 
} 

не только тестирование dolzina, это первый установка это 0. Это приводит к тому, пункт else для запуска, но с dolzina равным 0, который не является ожидаемым результатом.

Для сравнения, вы должны просто использовать ==.

+0

Не будет ли этот тест для 0 и сделать, если условие ложно и перейдет в другое? – Rohan

+0

@Rohan. Да, мой анализ был явно смущен. Спасибо, я исправил это сейчас, надеюсь. Предложение 'else' запускается *, но * с' dolzina' равным 0, которое никогда не должно происходить. – unwind

+0

Я пробовал разные варианты в рассылке IF, но пока ничего не работало. Может быть, что-то не так с моим вводом? – NejcZ

Смежные вопросы