У вас неопределенное поведение, потому что вы делаете:
fflush(stdin)
- не имеет завершенного нулями
bits
массива, который вы позже напечатаете в виде строки.
Do:
char bits[sizeof(int) * 8 + 1] = {0};
, который инициализирует весь массив bits
нулями (таким образом, он будет иметь нулевой терминатор для bits
) и избавится от всех вызовов fflush(stdin)
; fflush
определено только для выходных потоков в стандарте C.
Вам также не нужен начальный пробел в строке формата для сканирования целых (%i
) и строк (%s
), поскольку они уже игнорируют предыдущие пробелы.
И сбросьте &
здесь:
scanf(" %s", &number_string);
number_string
при переходе к scanf
уже распадается на char*
, что scanf
ожидает для %s
. То, что вы в настоящее время передаете scanf
, относится к типу char (*)[33]
, что неправильно для %s
.