El programa no se detiene en la línea scanf(“%c”, &ch), ¿por qué? [duplicate]
⏰ 1 minuto de lectura
Aviram Shiri
el programa no se detiene en la línea scanf(“%c”, &ch). ¿Por qué sucede? Por favor, alguien puede explicarme esto.
#include<stdlib.h>
#include<stdio.h>
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);
}
}
Básicamente, mientras que casi cualquier otro especificador de formato para scanf tiras de espacios en blanco iniciales, %c es el bicho raro. Hay que tratarlo con mucho cuidado.
– Andón M. Coleman
30 de noviembre de 2013 a las 23:08
Digamos que ingresa 2 cuando está leyendo para num. El flujo de entrada real será 2\n (\n es el carácter de nueva línea). 2 va en el num, y queda \n, que va en ch. Para evitar esto, agregue un espacio en blanco en el especificador de formato.
scanf(" %c", &ch);
Esto ignorará cualquier espacio en blanco, nueva línea o tabulación.
trucos
La razón detrás de esto es la nueva línea \n personaje dejado atrás por el anterior scanfal presionar Ingresar clave, para la próxima lectura de scanf. Cuando la declaración
scanf("%c", &ch);
ejecutado entonces se lee que \n dejado atrás por el anterior scanf.
Para comer esto \n puedes usar un espacio antes %c especificador Un espacio antes de la %c El especificador puede comer cualquier número de caracteres de espacio en blanco.
scanf(" %c", &ch);
^ a space
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
Básicamente, mientras que casi cualquier otro especificador de formato para
scanf
tiras de espacios en blanco iniciales,%c
es el bicho raro. Hay que tratarlo con mucho cuidado.– Andón M. Coleman
30 de noviembre de 2013 a las 23:08