HDU2008数值统计

问题遇到的现象和发生背景 统计给定的n个数中,负数、零和正数的个数;输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。
问题相关代码,请勿粘贴截图
#include
#include
#include
int main()
{
    int n,a,s[3];
    while(scanf("%d",&n)!=EOF){
        getchar();
        if(n==0)exit(0);
        memset(s,0,sizeof(int)*3);
        while(scanf("%d",&a)!=EOF){
        if(a>0){s[0]+=1;}
        else if(a<0){s[1]+=1;}
        else{s[2]+=1;}
        }
        printf("正数:%d,负数:%d,0:%d",s[0],s[1],s[2]);
    }
    return 0;
} 

运行结果及报错内容 输入6 0 1 2 3 -1 0没有输出结果且程序未结束;输入0可以正常结束
我的解答思路和尝试过的方法
我想要达到的结果 请教一下哪里有问题 谢谢!

修改见注释,供参考;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int n,a,s[3];
    while(scanf("%d",&n) == 1 && n != 0){ //修改
                       //getchar();   修改
                       //if(n==0)exit(0); //修改
        memset(s,0,sizeof(int)*3);
        while(n--){    //while(scanf("%d",&a)!=EOF) 修改
             scanf("%d", &a);
             if(a>0)      s[0]++;   //修改
             else if(a<0) s[1]++;   //修改
             else         s[2]++;   //修改
        }
        printf("正数:%d, 负数:%d, 零:%d\n",s[0],s[1],s[2]);//修改
    }
    return 0;
}

ctrl+z 终止输入

EOF输入用ctrl+Z