Моя программа либо не входит в 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;
}

Ответы (0 шт):