为什么我这个代码最后一个是负零点几就会无线循环

有没有大神解释一下,为什么我这个代码最后一个是负零点几就会无线循环

#include <stdio.h>
int main()
{ int n;
while(scanf("%d",&n)!=EOF){
if(n==0){
continue;
}
int arr[n];
int cnt=0;
int bnt=0;
int ant=0;
for(int i=0;i<n;i++){
scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++){
if(arr[i]>0){
cnt++;
}
else if(arr[i]<0){
bnt++;
}
else if(arr[i]==0){
ant++;
}

 }
 printf("%d %d %d\n",bnt,ant,cnt);

}

return 0;

}

int arr[n];
应改为
int *arr=new int[n];
在程序退出前加一句
delete[] arr;