¿Cómo detener el bucle infinito cuando se presiona el carácter en lugar de int?

Aquí, se le pide al usuario que presione la tecla respectiva para realizar una función particular, pero supongamos que presioné cualquier valor de carácter como “g”, entra en un bucle infinito.

¿Cómo resolver este problema?

int item,choice; clrscr(); while(1) { printf("QUEUE SIMULAtOR"); printf("\n1:Insert"); printf("\n2:Delete"); printf("\n3:Display"); printf("\nEnter your choice: "); scanf("%d",&choice); switch(choice) { case 1:qinsert(); break; case 2:item=qdelete(); if(item!=-1) printf("Deleted item is %d",item); break; case 3:printf("\nElements in the queue are:"); qdisplay(); break; case 4:exit(0); default:printf("\nWrong choice try again:"); } } 

Añade esto después del scanf()

 char ch; while( ( ch = getchar() ) != '\n' && ch != EOF ); 

Esto debería funcionar.

El problema se debió a que scanf() no almacena caracteres (ya que está utilizando% d) y, por lo tanto, permanecen en el búfer de entrada. El siguiente scanf() intenta leer esto y nuevamente, en lugar de almacenarlo, lo ignora y permanece en el búfer. Este proceso se repite, lo que provoca el bucle infinito.

El código que di lee todos los caracteres en el búfer, y así re-mueve el bucle infinito.

Saludos … Espero que esto te ayude 🙂

Esta es una pregunta realmente asombrosa. Debe intentar usar una statement de ruptura dentro de un if() .

Ejemplo:

 void main() { int n; printf("Enter the number 5\n"); while(1) { scanf("%d",n); if(n==5) { break; } else { printf(" enter the correct num again \n"); } } printf(" you've entered the right number\n"); } 

Allá vas, este progtwig se ejecutará hasta que ingreses el número 5.

Si desea cualquier entero, puede usar la función isdigit() que se encuentra debajo del ctype archivo de ctype