#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>

int main()
{
    // Zona de variables
    int opcion, salir = 0;
    float celsius, kelvin, fahrenheit;
    // Establecer locale a UTF-8
    setlocale(LC_ALL, ".UTF-8");
    // Cambia la consola a UTF-8 para entrada y salida
    SetConsoleOutputCP(CP_UTF8);
    SetConsoleCP(CP_UTF8);
    // Grueso del programa
    do
    {
        // Limpieza de pantalla
        system("cls");
        printf("---- CONVERSOR CELSIUS - KELVIN - FAHRENHEIT ----");
        printf("\n\t0) Salir.");
        printf("\n\t1) Convertir de Celsius a Kelvin.");
        printf("\n\t2) Convertir de Kelvin a Celsius.");
        printf("\n\t3) Convertir de Celsius a Fahrenheit.");
        printf("\n\t4) Convertir de Fahrenheit a Celsius.");
        printf("\n\t5) Convertir de Fahrenheit a Kelvin.");
        printf("\n\t6) Convertir de Kelvin a Fahrenheit.");
        printf("\n------------------------------------------------");
        printf("\nElija una opción: ");
        scanf("%d", &opcion);
        while (getchar() != '\n')
            ; // Limpieza de buffer

        switch (opcion)
        {
        case 0:
            printf("\nVa a salir del programa. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            salir = 1;
            break;
        case 1: // Celsius → Kelvin
            printf("\nVa a convertir grados celsius en grados kelvin. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en ºC (>= -273 ºC): ");
            scanf("%f", &celsius);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &celsius);
                while (getchar() != '\n')
                    ;
            } while (celsius < -273);
            kelvin = celsius + 273;
            printf("\n%.2f ºC = %.2f K", celsius, kelvin);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        case 2: // Kelvin → Celsius
            printf("\nVa a convertir grados kelvin en grados celsius. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en K (>= 0 K): ");
            scanf("%f", &kelvin);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &kelvin);
                while (getchar() != '\n')
                    ;
            } while (kelvin < 0);
            celsius = kelvin - 273.15f;
            printf("\n%.2f K = %.2f ºC", kelvin, celsius);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        case 3: // Celsius → Fahrenheit
            printf("\nVa a convertir grados celsius en grados fahrenheit. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en ºC (>= -273 ºC): ");
            scanf("%f", &celsius);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &celsius);
                while (getchar() != '\n')
                    ;
            } while (celsius < -273);
            fahrenheit = (1.8f * celsius) + 32;
            printf("\n%.2f ºC = %.2f ºF", celsius, fahrenheit);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        case 4: // Fahrenheit → Celsius
            printf("\nVa a convertir grados fahrenheit en grados celsius. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en ºF (>= -459.4 ºF): ");
            scanf("%f", &fahrenheit);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &fahrenheit);
                while (getchar() != '\n')
                    ;
            } while (fahrenheit < -459.4);
            celsius = (fahrenheit - 32) / 1.8f;
            printf("\n%.2f ºF = %.2f ºC", fahrenheit, celsius);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        case 5: // Fahrenheit → Kelvin
            printf("\nVa a convertir grados fahrenheit en grados kelvin. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en ºF (>= -459.4 ºF): ");
            scanf("%f", &fahrenheit);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &fahrenheit);
                while (getchar() != '\n')
                    ;
            } while (fahrenheit < -459.4);
            kelvin = ((fahrenheit - 32) / 1.8f) + 273;
            printf("\n%.2f ºF = %.2f K", fahrenheit, kelvin);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        case 6: // Kelvin → Fahrenheit
            printf("\nVa a convertir grados kelvin en grados fahrenheit. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            printf("\nIntroduzca la temperatura en K (>= 0 K): ");
            scanf("%f", &kelvin);
            while (getchar() != '\n')
                ;
            do
            {
                printf("Valor incorrecto. Introduzca de nuevo: ");
                scanf("%f", &kelvin);
                while (getchar() != '\n')
                    ;
            } while (kelvin < 0);
            fahrenheit = (1.8f * (kelvin - 273)) + 32;
            printf("\n%.2f K = %.2f ºF", kelvin, fahrenheit);
            printf("\nPulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
            break;
        default:
            printf("\nOpción no válida. Pulse INTRO para continuar...");
            while (getchar() != '\n')
                ;
        }
    } while (salir == 0);
    printf("\nPrograma terminado.\n");
    // Salida OK
    return 0;
}