Я думаю, что стек поврежден, потому что вы использовали "% 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;
}