2016-04-02 59 views
-1

我必须制作一个程序,用于从用户输入十进制数字的基础上转换数字。我提出这个代码,但我无法向炭数组传递作为对函数中的参数:如何将char数组作为参数传递给C中的函数?

int base_decimal(char x[100], int y){ 
int tot = 0; 
int p = 1; 
int arr[100]; 
int i,a,j = 100; 

for(i=0;i<100;i++){ 
    printf(" %s ", x[i]); 
     switch(x[j]){ 
      case 'a': arr[i] = 10; 
      break; 
      case 'b': arr[i] = 11; 
      break; 
      case 'c': arr[i] = 12; 
      break; 
      case 'd': arr[i] = 13; 
      break; 
      case 'e': arr[i] = 14; 
      break; 
      case 'f': arr[i] = 15; 
      break; 
      default: arr[i] = atoi(&x[j]); 
      break; 
     } 

    j--; 
} 

for(a = 0; i<100;a++){ 

     tot += arr[a] * pow(y,a); 

} 


return tot; 

} 

主:

void main(void) { 
    int b, x=0; 
    char n[100]; 
    int num; 

    printf("type de number: \n"); 

    scanf("%s", n); 
    fflush(stdin); 

    printf("type de base:\n"); 
    scanf("%i", &b); 
    num = base_decimal(n, b); 

    printf("The number %i in decimal is: %i ", b, num); 
} 

当我运行该代码,该程序崩溃。

有人可以帮我吗?

遗憾的英语不好:)

回答

0

这是一个整理好的代码版本。该算法是错误的。那是你的代码错误有些事情

这是错误的

for(a = 0; i<100;a++){ 

所以是这样的,我删除它。

printf(" %s ", x[i]); 

如果你要打印的字符,你需要牛逼

printf(" %c ", x[i]); 

看一看,我添加的转换方法。

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

int convert(int number,int base){ 
    if(number == 0 || base==10) { 
    return number; 
    } 
    return (number % base) + 10*convert(number/base, base); 
} 


int base_decimal(char x[100], int y){ 
    int tot = 0; 
    int arr[100]; 
    int i,a,j = 100; 

    for(i=0;i<100;i++){ 
    switch(x[j]){ 
     case 'a': arr[i] = 10; break; 
     case 'b': arr[i] = 11; break; 
     case 'c': arr[i] = 12; break; 
     case 'd': arr[i] = 13; break; 
     case 'e': arr[i] = 14; break; 
     case 'f': arr[i] = 15; break; 
     default: arr[i] = atoi(&x[j]); break; 
    } 
    j--; 
    } 

    for(a = 0; a<100;a++){ 
    tot += arr[a] * pow(y,a); 
    } 
    return tot; 
} 

int main(void) { 
    int b = 0; 
    int n = 0; 
    char result[100]; 
    int num; 
    printf("type de number: \n"); 
    scanf("%d", &n); 
    fflush(stdin); 
    printf("type de base:\n"); 
    scanf("%d", &b); 
    //num = base_decimal(n, b); 
    num = convert(n, b); 

    printf("The number %i in decimal is: %i ", b, num); 
    return 0; 
} 
+0

谢谢你,我刚刚开始用C语言编程,并且遇到很多困难。再次感谢您的帮助。 – puddaa03

0

printf(" %s ", x[i]); 

你要打印字符串,但x[i]实际上是一个字符,所以你应该使用

printf(" %c ", x[i]); // or x[j - 1] 
//  ^ ^
//  format and index 

请注意,也我已将x[j]更正为x[i] or x[j - 1]。否则,您尝试访问索引为j = 100的数组超出范围。请记住,定义为array[n]的数组中的最后一个元素是a[n - 1],这是因为第一个元素不是a[1]而是a[0]

+0

在switch语句中发生'i'错误。或者,如果你真的打算使用'j'向后走阵列,你需要在99而不是100开始j。 –

+0

感谢您的帮助!我是一个初学者,并没有注意到这些错误kk – puddaa03

相关问题