Моя программа либо не входит в else if, либо неправильно переводит дробное число в двоичную систему счисления
Если объявить переменную temp в теле do (перед scanf("%d", &temp);), то при вводе 2 программа не входит в условие else if (а именно игнорирует его и входит в if так, если бы temp равнялась 1). А если так, как на примере (то есть до do), то программа входит в условие, но возвращает одни нули (целая часть числа: 0, дробная часть числа: 000000...). Я не понимаю что мне делать и почему это происходит. ЧатГПТ не справляется.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <windows.h>
int convert_int(int num)
{
int result = 0, k = 1;
while (num != 0)
{
result += (num % 2) * k;
k *= 10;
num /= 2;
}
printf("\nВаше число в двоичной системе счисления: %d", result);
return 0;
}
void convert_float(float num)
{
int intPart = (int)num;
float fractionalPart = num - intPart;
int binaryInt[32], binaryFrac[32];
int i, j;
// перевод целой части числа
i = 0;
while (intPart > 0) {
binaryInt[i] = intPart % 2;
intPart /= 2;
i++;
}
printf("Целая часть числа: ");
if (i == 0)
printf("0");
for (j = i - 1; j >= 0; j--) {
printf("%d", binaryInt[j]);
}
// перевод дробной части числа
i = 0;
while (fractionalPart > 0) {
if (i >= 32)
break;
fractionalPart *= 2;
if (fractionalPart < 1) {
binaryFrac[i] = 0;
}
else {
binaryFrac[i] = 1;
fractionalPart -= 1;
}
i++;
}
printf("\nДробная часть числа: ");
if (i == 0)
printf("0");
for (j = 0; j < i; j++) {
printf("%d", binaryFrac[j]);
}
printf("\n");
}
void menu_initialization()
{
printf("=====================");
printf("\nВыберете тип числа: ");
printf("\n1. Целое");
printf("\n2. Дробное");
printf("\n=====================");
printf("\n\n");
}
void continuation_initialization()
{
printf("\n\n=====================================");
printf("\nДля продолжения нажмите любую клавишу");
printf("\nЕсли вы хотите выйти нажмите q\n");
printf("=====================================\n");
}
int main()
{
setlocale(LC_ALL, "Rus");
char input;
int temp;
do
{
system("cls");
menu_initialization();
scanf("%d", &temp);
if (temp == 1)
{
printf("\nВведите целое число: ");
int value;
int status = scanf("%d", &value);
if (status != 1) {
// Обработка ошибки считывания
}
else {
convert_int(value);
}
}
else if (temp == 2)
{
system("cls");
printf("\nВведите дробное число: ");
float value;
int status = scanf("%d", &value);
if (status != 1) {
// Обработка ошибки считывания
}
else {
convert_float(value);
}
}
else
{
system("cls");
printf("Указано неверное число!");
}
getchar();
continuation_initialization();
input = _getch();
} while (input != 'q');
return 0;
}