C语言不可理解的bug

求问
为什么一下代码会有a+b+c不等于20的结果?

#include
#include
int main(){
    int i,a,b,c;
    a=0;b=0;c=0;
    srand((unsigned)time(NULL));
    int n[20];
    for(i=1;i<=20;i++){
        n[i]=rand()%21-10;
        //printf("%d",num20[i]);
        if(n[i]>0) a++;
        else if(n[i==0]) b++;
        else if(n[i]<0) c++;
    }
    printf("%d\n%d\n%d\n",a,b,c);
    return 0;
}


该回答引用GPT:
上述代码中,当i等于20时数组n[20]会出现越界,导致程序崩溃。需要将数组n的大小定义为21。此外,第7行中rand()函数生成的随机数范围是[-10,10],加1后变为[-9,11],而这个范围包括了0,因此会导致代码不准确。应该将rand()%21-10改为rand()%20-10,使得随机数的范围变为[-10,9],不包括0。另外,在第12行中if语句的条件n[i==0]应该改为n[i]==0,否则也会导致不准确。最终可以得到如下代码:

#include<stdlib.h>
#include<time.h>
int main(){
    int i,a=0,b=0,c=0;
    srand((unsigned)time(NULL));
    int n[21];
    for(i=1;i<=20;i++){
        n[i]=rand()%20-10;
        if(n[i]>0) 
            a++;
        else if(n[i]==0) 
            b++;
        else if(n[i]<0) 
            c++;
    }
    printf("%d\n%d\n%d\n",a,b,c);
    return 0;
}

如还有疑问,可留言帮助解决。

else if(n[i==0]) b++;
->
else if(n[i]==0) b++;