Язык C, выполнить не удалось, десятичное в двоичное - PullRequest
1 голос
/ 16 января 2012

Я пытаюсь преобразовать десятичное число в двоичное число.

У вас есть идеи, почему у меня "сбой запуска"?(Я думаю, что рядом с моей функцией scanf есть ошибка).

PS: я знаю, что алгоритм этой программы еще не работает, но я хотел сначала попытаться скомпилировать.Но я открыт для любых предложений ^^

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

/**
 * Uebung 1.3 - C Teil
 * Programm, welches eine Integer-Zahl in Binärdarstellung ausgibt.
 */

#define DEBUG 1

/** Structure of a binary Value */
typedef struct{
    int size;
    int* valueInBin;
    int valueInDec;
}Wert;

/** Global variables */
//nothing

/** Functions declarations */
void iToBinary(Wert* w);
void printBinaryValue(Wert w);

/** Main function */
int main(int argc, char** argv) {

    /* Local variable*/
    Wert myVal;

    printf("Wert als Integer (auch negativ): ");
    scanf("%d", &(myVal.valueInDec));
    DEBUG ? printf("Mein Wert : %i", myVal.valueInDec):printf("");
    myVal.size = sizeof(int)*8;
    DEBUG ? printf("size: %i", myVal.size):printf("");

    iToBinary(&myVal);

    printBinaryValue(myVal);

    return (EXIT_SUCCESS);   
}

void iToBinary(Wert* w){

    int i,temp = w->valueInDec;

    w->size = sizeof(w->valueInDec)*8;

    w->valueInBin = (int*) malloc(sizeof(int) * (int)(w->size)) ;

    for(i=w->size-1; i>=0; i++){
        if(temp > pow(2,i)){
            *((w->valueInBin)+i) = 1;
        }
        else{
            *((w->valueInBin)+i) = 0;
        }
    }
}

void printBinaryValue(Wert w){
    unsigned int i;

    printf("My int in bin : ");
    for(i=0; i<w.size; i++){
        printf("%i",(*(w.valueInBin)+i));
    }
}

1 Ответ

3 голосов
/ 16 января 2012

Это ваша проблема:

for(i=w->size-1; i>=0; i++)

На самом деле вы запускаете бесконечный цикл. Измените i++ на i--.

Ваш код также содержит некоторые ошибки в функциях iToBinary и printBinaryValue. Попробуйте поймать ошибки!

Кстати, рекурсивная функция может сделать это намного лучше! Если у вас нет никаких ограничений, подумайте.

...