Empecé a aprender C y traté de codificar este programa matemático usando declaraciones de cambio. El programa se ejecuta y funciona bien cuando escaneo primero al operador y luego escaneo los números. Pero si cambio el orden de las funciones scanf para tomar primero los números y luego los operadores, el programa toma el número pero luego no toma la segunda entrada (el operador) y solo imprime el valor predeterminado (entrada no válida). ¿Por qué está pasando esto?
He proporcionado el código (si ejecuto este código, el problema ocurre con el programa simplemente tomando los números y no tomando los operadores. Pero si se invierte el orden, funciona).
#include <stdio.h> int main() { float a, b, result; char operator; printf("Enter 2 numbers:"); scanf("%f %f", &a, &b); printf("Choose a math operator (+, -, *, /):"); scanf("%c", &operator); switch (operator) { case '+': result = a + b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; default: printf("\nInvalid operator"); return -1; } printf("%f", result); return 0; }La cadena de formato "%c" leerá el carácter de nueva línea de la primera línea de entrada. En cambio, lo que desea es " %c" , que omitirá los espacios en blanco iniciales, así que reemplace la línea
scanf("%c", &operator);con
scanf(" %c", &operator);Ver también https://pubs.opengroup.org/onlinepubs/9699919799/
Una directiva compuesta por uno o más caracteres de espacio en blanco se ejecutará leyendo la entrada hasta que no se puedan leer más entradas válidas, o hasta el primer byte que no sea un carácter de espacio en blanco, que permanezca sin leer.
necesitas cambiar
scanf("%c", &operator);para
scanf("%s", &operator);se ejecutará