Error de comstackción con gcc: advertencia: el formato especifica el tipo ‘int *’ pero el argumento tiene el tipo ‘double *’

Este es mi primer progtwig en C, por favor sean gentiles.

Estoy tratando de obtener la entrada del usuario para la conversión entre temperaturas, y uso el interruptor para calcular las temperaturas convertidas. Mi siguiente progtwig arroja errores como este cuando bash comstackrlo con gcc en Mac:

convertTemp.c:17:20: warning: format specifies type 'int *' but the argument has type 'double *' [-Wformat] scanf ("%d", &Celcius); ~~ ^~~~~~~~ %lf convertTemp.c:21:72: warning: format specifies type 'int' but the argument has type 'double' [-Wformat] printf ("The converted temperature of %d in Fahreight is: %d\n", Celcius, Fahr); ~~ ^~~~~~~ %f convertTemp.c:21:81: warning: format specifies type 'int' but the argument has type 'double' [-Wformat] printf ("The converted temperature of %d in Fahreight is: %d\n", Celcius, Fahr); ~~ ^~~~ %f convertTemp.c:25:20: warning: format specifies type 'int *' but the argument has type 'double *' [-Wformat] scanf ("%d", &Fahr); ~~ ^~~~~ %lf convertTemp.c:29:70: warning: format specifies type 'int' but the argument has type 'double' [-Wformat] printf ("The converted temperature of %d in Celcius is: %d\n", Fahr, Celcius); ~~ ^~~~ %f convertTemp.c:29:76: warning: format specifies type 'int' but the argument has type 'double' [-Wformat] printf ("The converted temperature of %d in Celcius is: %d\n", Fahr, Celcius); ~~ ^~~~~~~ %f 6 warnings generated. 

Código:

 #include  int main (void) { int choice; double Celcius, Fahr; printf ("Do you want to convert from C to F (1) or from F to C(2))?"); scanf ("%i", &choice); switch(choice) { case 1: printf ("Please type the temp in Celcius"); scanf ("%d", &Celcius); Fahr = (Celcius * 9) / 5; Fahr += 32; printf ("The converted temperature of %d in Fahreight is: %d\n", Celcius, Fahr); case 2: printf ("Please type the temp in Fahrenheit"); scanf ("%d", &Fahr); Celcius = (Fahr - 32) * 5; Celcius /= 9; printf ("The converted temperature of %d in Celcius is: %d\n", Fahr, Celcius); } return 0; } 

Su progtwig invoca un comportamiento indefinido . Usar un especificador de conversión incorrecto invoca a UB. Para escanear un double use el especificador %lf (la advertencia del comstackdor ya lo sugiere).

 scanf ("%lf", &Celcius); 

Ejecución de la muestra.

Para imprimir dobles y flotantes, puede usar los especificadores %g y %f . También debe manejar la situación predeterminada en el conmutador en caso de una entrada de usuario no válida. Tal vez mediante la impresión de un mensaje de error útil para el usuario.

También se recomienda que se break; después de cada instrucción de cambio, para evitar la ejecución de más declaraciones de casos a menos que se prefiera ese comportamiento.