2016-04-02 3 views
-1

Ich muss ein Programm machen, das eine Zahl von einer Basis konvertiert, die der Benutzer in einer Dezimalzahl eingegeben hat. Ich habe diesen Code, aber ich habe Probleme, die char-Array als Parameter an die Funktion übergeben:Wie kann ich ein char-Array als Parameter an eine Funktion in C übergeben?

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; 

} 

der Haupt:

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

, wenn ich den Code ausführen, stürzt das Programm ab.

Kann mir jemand helfen ???

sorry für die schlechte Englisch :)

Antwort

0

Dies ist eine aufgeräumte Version Ihres Codes. Der Algorithmus ist jedoch falsch. Einige Dinge, die mit Ihrem Code falsch waren

waren

Das ist falsch

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

Das war also, ich entfernt es.

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

Wenn Sie die Zeichen drucken möchten, benötigen Sie t

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

Werfen Sie einen Blick auf die convert-Methode, die ich hinzugefügt.

#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

Danke Mann, ich fange gerade an, in C zu programmieren, und ich habe viele Schwierigkeiten. Nochmals vielen Dank für die Hilfe. – puddaa03

0

In

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

Sie versuchen, Zeichenfolge zu drucken, aber x[i] ist eigentlich ein Zeichen, so sollten Sie

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

Bitte beachten Sie auch dass ich x[j] zu x[i] or x[j - 1] korrigiert habe. Andernfalls haben Sie versucht, auf das Array mit dem Index j = 100 zuzugreifen, das außerhalb des Bereichs liegt. Denken Sie daran, das letzte Element im Array, das als array[n] definiert ist, ist a[n - 1], weil das erste Element nicht a[1], sondern a[0] ist.

+0

Derselbe 'j' für' i' Fehler tritt in der switch-Anweisung auf. Oder wenn Sie wirklich "j" verwenden möchten, um rückwärts durch das Array zu gehen, müssen Sie j bei 99 nicht 100 beginnen. –

+0

Danke für die Hilfe !! Ich bin ein Anfänger und bemerke diese Fehler kk – puddaa03