将每个基地转换为另一个基础(不起作用)

时间:2013-12-01 07:25:44

标签: c ascii

我编写了一个C程序,将每个基数转换为另一个基数。但是当我要将ascii代码转换为数字时,我面临一个问题...... 请帮忙 :) 我认为我的问题是因为我无法将assci转换为数字,它说: ====>未明确引用`pow'

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

int CB, DB;
 void base(void)
 {
   int adad2[100], i=-1,j;
   char adad1[100], ch;
   long int num1=0, num2=0;
   printf("Enter your num: ");
   scanf("%c", &ch);

   do
     {
       i++;
       scanf("%c", &adad1[i]);
     } while(adad1[i]!='\n');

   j=i-1;
   for(i=j;i>=0;i--)
     { //converts the base to 10.                                                                                                                                 
       if(adad1[i]<='9'&& adad1[i]>='0')
     {
       num1+=((long int)pow((float)CB,(j-i)))*(((int)adad1[i])-48);  //converting ascii code to num                                         
     }
       else if(adad1[i]<='Z'&&adad1[i]>='A')
     {
       num1+=((long int)pow((float)CB,(j-i)))*(((int)adad1[i])-55);
     }
       else if(adad1[i]<='z'&&adad1[i]>='a')
     {
       num1+=((long int)pow((float)CB,(j-i)))*(((int)adad1[i])-87);
     }
     }

   i=0;
   while(num1>=DB)
     { //converts the base to b. (START)                                                                                                                             
       adad2[i]=num1%DB;
       i++;
       num1/=DB;
     }

   adad2[i]=num1; //converts the base to b. (END)                                                                                                                                
   printf("\nResult: \n");

   for(;i>=0;i--)
     { //prints the result.                                                                                                                                          
       if(adad2[i]<=9&&adad2[i]>=0){
     printf("%d",adad2[i]);
       }

       else if(adad2[i]>=10&&adad2[i]<=35){
     printf("%c",(char)(adad2[i]+55));
       }
     }
 }

 void main(void)
 {
   printf("\nEnter current base: ");
   scanf("%d", &CB);

   printf("\nEnter desired base: ");
   scanf("%d", &DB);

   base();

 }

3 个答案:

答案 0 :(得分:1)

当您从编译器中收到错误时

 undefined reference to `pow'  

那么这意味着库函数没有与您的程序链接。为此,您必须包含包含pow函数定义的标头。在GCC中使用lm标志进行编译。它将包含<math.h>标头,其中包含库函数pow的定义。

答案 1 :(得分:0)

如果您使用的是gcc,则可能需要像这样编译:

gcc yourfile.c -o yourapp -lm

lm选项链接数学库。

在旁注中,请勿使用void main代替使用标准的内容:

int main(int argc, char *argv[])

答案 2 :(得分:0)

正如其他人已经指出的那样,您可以通过链接数学库来“解决”链接器错误。 但是,这不是您的主要问题。

浮点数是inherently inexact,因此 A Very Bad Idea(TM) 可以将它们与所谓的精确整数运算一起使用。如果对pow()的调用返回的数字略小于基数的预期功效,那么,由于截断,您将得到错误的结果。

我建议你自己写一个整数幂函数,可以安全使用 e。 G:

unsigned long integer_pow(unsigned long base, unsigned long exp)
{
    unsigned long res = 1;
    while (exp--) {
        res *= base;
    }

    return res;
}