2014-10-19 5 views
0

Я пишу программу, которая может преобразовать базовый номер 10 в другую базу между 2 и 16. Я написал свою функцию следующим образом, и я думаю, что это правильно:Функция производит пустую строку вместо вывода (C)

char* baseConversion(int number, int base, char *word) 
 
{ 
 
     
 
     if (number != 0) { 
 
    
 
     int x = number % base; 
 
     
 
     if(x > 9){ 
 
      
 
      if(x == 10) 
 
      *word = 'A'; 
 
      
 
      if(x == 11) 
 
      *word = 'B'; 
 
      
 
      if(x == 12) 
 
      *word = 'C'; 
 
      
 
      if(x == 13) 
 
      *word = 'D'; 
 
      
 
      if(x == 14) 
 
      *word = 'E'; 
 
      
 
      if(x == 15) 
 
      *word = 'F'; 
 
      
 
      baseConversion(number/base, base, word+1); 
 
      
 
      } 
 
      
 
     else { 
 
      *word = x; 
 
      baseConversion(number/base, base, word+1); 
 
      } 
 
     
 
     
 
     
 
     
 
     } 
 
     
 
}

у меня есть моя основная функция создана, чтобы проверить это:

int main(){ 
 
     int num, base; 
 
     
 
     char word[20]; 
 
     
 
     scanf("%d %d", &num, &base); 
 
     
 
     baseConversion(num, base, word); 
 

 
     printf("%s", word); 
 
     
 
     system("PAUSE"); 
 
     
 
     
 
     
 
     }

Когда я подаю его на вход (мой тестовый пример был 15 16, который должен быть оценен до F), я вместо этого получаю слово null. Я не передаю свою строку правильно? Или моя арифметика указателя?

Примечание: Также я знаю, что это даст мне обратный ответ, я могу исправить это позже, когда я не получу нулевой ответ.

+0

В вашей функции нет функции «return», которая должна возвращаться в соответствии с определением функции –

+0

@KevalDoshi: Это нормально, поскольку OP игнорирует то, что будет возвращено, так или иначе :) –

+0

Но не должен ли указатель разрешать его изменять вне оператора возврата? – user4159242

ответ

0

Для num<10 вы не вставляете символ для этой цифры (например, вы должны положить '0', когда x==0). Чтобы проверить: попробуйте значение, которое является всеми буквами в базе 16. (Конечно, вы никогда не завершаете строку, так что вы, вероятно, увидите некоторые напуганные вещи ...)

(Также ваш код выиграл ' t для баз, отличных от 16, так как у вас там 16 жестко закодированных.)

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