2016-04-02 11 views
-1

Kullanıcının ondalık sayı girdiği bir tabandan bir sayıyı dönüştüren bir program yapmalıyım. Bu kodu yapılmış ama işlevini parametre olarak char array geçmesine sorun yaşıyorum:Bir char dizisini C'deki bir işleve parametre olarak nasıl geçirebilirim?

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; 

} 

ana:

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

Ben kodu, program çöker çalıştırdığınızda.

Birisi bana yardım edebilir mi ??? Kötü İngilizce :)

cevap

0

Bu, kodunuzun birleştirilmiş sürümüdür. Algoritma yanlış olsa da. senin koduyla yanlış bazı şeyler Bu yüzden bu oldu

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

yanlış

olduğunu

vardı, bunu kaldırdık. Eğer karakterleri yazdırmak isterseniz

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

t

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

ekledim dönüştürme yönteminin göz at gerekir.

#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

teşekkürler fark etmeyin, ben sadece C programlamaya başlıyorum ve birçok zorluk var. Tekrar, yardım için teşekkürler. – puddaa03

0

Eğer

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

da unutmayın kullanmalısınız öyleyse, dize yazdırmak için çalışıyoruz ama x[i] aslında bir karakterdir

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

yılında için

üzgün Ben x[j] için x[i] or x[j - 1] düzeltmiş. Aksi halde aralık dışı olan j = 100 dizinine sahip diziye erişmeye çalışıyordunuz. Unutmayın, array[n] olarak tanımlanan dizideki son elemanın a[n - 1] olması, ilkinin a[1] değil a[0] olmasıdır.

+0

Anahtar deyiminde "i" hatası için aynı "j" oluşur. Ya da diziyi geriye doğru ilerlemek için 'j' kullanmayı düşünüyorsanız, 99’u 100’ten başlamalısınız. –

+0

Yardımın için teşekkürler! Ben bir acemi ve bu hataları kk – puddaa03

İlgili konular