¿Por qué no obtengo el resultado deseado?

¿Has definido las variables correctamente? Porque el código funciona en mi sistema.

Qué compilador estas usando? (Aunque no veo por qué puede hacer la diferencia). Aquí hay una captura de pantalla de mi sistema.

De acuerdo, debe eliminar el espacio entre% c y% s en scanf.

En este momento, no estoy seguro de la explicación real. Tendrá que leer más sobre fflush y scanf (y como dice Neeraj, scanf es una fuente de problemas dolorosos en la vida, evítelo si puede). Actualizaré la respuesta una vez que comprenda la razón.

Como puede ver, cuando hay un espacio entre% c y% s, el primer carácter de la primera entrada se lee en% c (como debería) y el resto de la cadena se lee en% s hasta el primer espacio . % s no se da cuenta en este caso de que debería comenzar a leer después del sapce.


Tan pronto como elimino el espacio, se comportan como deberían. Por ahora, como nos enseñaron en clase, no use espacios en la cadena de formato. Causan pena, pena profunda.

Necesita aprender el uso adecuado de scanf (). Estas son algunas de las dificultades que tiene “scanf” y, por lo tanto, scanf puede evitarse cuando hay múltiples entradas de caracteres o cadenas. Use fgets () en su lugar.

En cuanto a su pregunta : su código parece estar bien y funcionará como se espera solo en el caso cuando omita tomar la entrada entera. (como lo muestra Aparajita señora!)
Lo que puede hacer, tendrá que comer la entrada de caracteres ‘/ n’ justo después del escaneo de enteros, a través de getchar () o cualquiera de sus hermanos.
Mira esto:

Si no lo hace, el carácter de nueva línea o espacio será consumido por la entrada de caracteres y, por lo tanto, char imprimirá ‘nada’. La siguiente entrada se considerará como ‘f’ y, por lo tanto, la cadena consumirá este carácter ‘f’ como una cadena y, por lo tanto, obtendrá una salida inusual.

Con respecto a fflush (), debe estudiar un poco al respecto. No lo use a menos que sea muy necesario.