c语言整数去重找错误

Description

给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

Input

输入一个整数n,表示序列有n个整数(0<n<=100000)

接下来输入n个整数,表示序列中的数,这些数在[0,100000]区间内。

Output

按照输入的顺序输出去重后的序列,整数之间用空格隔开。

Sample Input
8
1 2 4 3 1 2 4 3
Sample Output
1 2 4 3

#include<stdio.h>
int main()
{
    int n,i,j,k,max=-1;;
    while(scanf("%d",&n)!=EOF)
    {
        max=-1;
        int a[100001],b[100005];
        for(i=0;i<=n-1;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]>max) max=a[i];
        }
        printf("%d",a[0]);
        b[a[0]]=-1;
        for(k=1;k<=n-1;k++)
        {
            if(b[a[k]]==0)
            {
                printf(" %d",a[k]);
                b[a[k]]=-1;
            }
        }
        printf("\n");
    }
    return 0;
}


以上代码提交后显示错误

数组 b[] 没有初始化,修改如下,供参考:

#include<stdio.h>
int main()
{
    int n,i,j,k;  //max=-1;
    //while(scanf("%d",&n)!=EOF)
    //{
        //max=-1;
    int a[100001] = {0}, b[100005] = {0}; //修改
    scanf("%d", &n);
    for(i=0;i<=n-1;i++)
    {
        scanf("%d",&a[i]);
            //if(a[i]>max) max=a[i];
    }
    printf("%d",a[0]);
    b[a[0]] = -1;
    for(k=1;k<=n-1;k++)
    {
        if(b[a[k]] == 0)
        {
            printf(" %d",a[k]);
            b[a[k]]=-1;
        }
    }
    printf("\n");
    //}
    return 0;
}

max多余吧。
输入的数存放在a数组,然后遍历a,对于a中每一个数到b数组中找一下是否存在,存在则取a中下一个元素,不存在则将这个数存入b数组,a遍历完,输出b

while(scanf("%d",&n)!=EOF)
目测只有一组数据
那么不要循环
scanf("%d",&n);
即可