2016-04-02 58 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

相關問題