El progtwig no se detiene en la línea scanf (“% c”, & ch), ¿por qué?

el progtwig no se detiene en la línea scanf (“% c”, & ch). ¿Por qué sucede que Sombody puede explicarme esto?

#include #include struct list { char val; struct list * next; }; typedef struct list item; void main() { char ch; int num; printf("Enter [1] if you want to use linked list or [2] for realloc\n"); scanf("%d", &num); if(num == 2) { scanf("%c", &ch); printf("%c", ch); } } 

Digamos que ingresaste 2 cuando estás leyendo para num. La stream de entrada real será 2 \ n (\ n es el carácter de nueva línea). 2 entra en el num, y queda \ n, que entra en ch. Para evitar esto, agregue un espacio en blanco en el especificador de formato.

 scanf(" %c", &ch); 

Esto ignorará espacios en blanco, líneas nuevas o tabs.

La razón detrás de esto es el carácter newline \n dejado atrás por scanf anterior, al presionar la tecla Enter , para la próxima lectura de scanf . Cuando la statement

 scanf("%c", &ch); 

ejecutado entonces lee que \n quedó atrás por el scanf anterior.
Para comer esto \n puedes usar un espacio antes del especificador %c . Un espacio antes de que el especificador %c pueda consumir cualquier cantidad de caracteres de espacio en blanco.

 scanf(" %c", &ch); ^ a space