Почему мой код испортил стек? Как я могу это исправить? - PullRequest
0 голосов
/ 27 октября 2019

Мне нужно сделать программу, которая может изменять десятичную дробь, которая имеет диапазон беззнаковых символов. Я сделал код, но у меня тип переменной 'номер' создает проблемы. Я думаю, что я не должен объявлять число как переменную целочисленного типа для ограничения этого вопроса ... так Как я должен решить это? Как я могу заставить мою программу не повреждать стек переменной 'number'?

#include <stdio.h>
#define N_size 8
int main(void) {
    unsigned char number;
    int bin[N_size] = { 0 };
    printf("Input a decimal number of which range of unsigned char:"); 
    scanf("%d", &number);
    for (int i = 0; i < 8; i++){
        bin[N_size-1-i] = number % 2; number = number / 2;

    }
    for(int j=0;j<8;j++)
        printf("%d", bin[j]);

}

1 Ответ

0 голосов
/ 27 октября 2019

Я думаю, что стек поврежден, потому что вы использовали "% d", когда числовая переменная имеет тип unsigned char. Вы можете изменить его на "% ud", но я не думаю, что это поможет. Кроме того, вы можете использовать объединенную структуру данных. Союз делится памятью на весь свой контент. Я написал программу об этой проблеме некоторое время назад:

#include <stdio.h>
#include <stdlib.h>
struct bits
{
       unsigned char bit0 : 1;
       unsigned char bit1 : 1;
       unsigned char bit2 : 1;
       unsigned char bit3 : 1;
       unsigned char bit4 : 1;
       unsigned char bit5 : 1;
       unsigned char bit6 : 1;
       unsigned char bit7 : 1;
};
union dectobin
{
    unsigned int value;
    struct bits bit;
};

int main()
{
    union dectobin w;
    int s;
    printf("Input a decimal number :");
    s=scanf("%ud",&(w.value));
    if(s!=1)
    {
        printf("Incorrect input");
        return 1;
    }
    printf("%d %d %d %d %d %d %d %d",(w.bit.bit7),(w.bit.bit6),(w.bit.bit5),(w.bit.bit4),(w.bit.bit3),(w.bit.bit2),(w.bit.bit1),(w.bit.bit0));
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...