【问题标题】:How can I pass a char array as a parameter to a function in C?如何将 char 数组作为参数传递给 C 中的函数?
【发布时间】:2016-07-21 22:55:08
【问题描述】:

我必须编写一个程序,从用户输入的十进制数的基数转换数字。我编写了这段代码,但无法将 char 数组作为函数的参数传递:

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);
}

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

谁能帮帮我???

抱歉英语不好:)

【问题讨论】:

    标签: c arrays function parameters char


    【解决方案1】:

    这是您的代码的整理版本。但是算法是错误的。您的代码有一些问题是

    这是错误的

    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;
    }
    

    【讨论】:

    • 谢谢,我刚开始用 C 语言编程,遇到了很多困难。再次感谢您的帮助。
    【解决方案2】:

    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]

    【讨论】:

    • 在 switch 语句中出现与 i 相同的 j 错误。或者如果你真的打算使用j 向后遍历数组,你需要从 99 而不是 100 开始 j。
    • 感谢您的帮助!!我是初学者,没有注意到这些错误 kk
    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多