scanf ignorando, bucle infinito

int flag = 0;
int price = 0;
while (flag==0)
{
    printf("\nEnter Product price: ");
    scanf("%d",&price);
    if (price==0) 
        printf("input not valid\n"); 
    else 
        flag=1;
}

Cuando ingreso un número válido, el ciclo termina como se esperaba. Pero si ingreso algo que no es un número, comohello, entonces el código entra en un bucle infinito. Simplemente sigue imprimiendoEnter Product price: yinput not valid. Pero no espera a que ingrese un nuevo número. ¿Porqué es eso