大神们,程序错在哪?我的思路是输入数组将其排序然后输出啊a[1];

问题描述
  编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束。然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来。说明:(1)0表示输入结束,它本身并不计入这组整数中。(2)在这组整数中,既有正数,也可能有负数。(3)这组整数的个数不少于2个。
  输入格式:输入只有一行,包括若干个整数,中间用空格隔开,最后一个整数为0。
  输出格式:输出第二大的那个整数。
  输入输出样例
样例输入
5 8 -12 7 0
样例输出
7
#include
int main()
{
int a[20]={0};
int i=0,j,k,t,m;
do
{
scanf("%d",&a[i]);
i++;
}
while(a[i]!=0&&i if(i>=1)
{
for(k=0;k {
m=k;
for(j=k;j {
if(a[j]>a[m])
m=j;
t=a[m];a[m]=a[k];a[k]=t;
}
}
printf("%d\n",a[1]);
}
return 0;
}

程序的错误信息是啥?

#include<stdio.h>
#include<stdlib.h>

int cmp(const void * a, const void * b)
{
    return *(int *)b - *(int *)a;
}

int main()
{
    int a[20]={0};
    int i=-1;
    do
    {
        scanf("%d",&a[++i]);
    }
    while(a[i]!=0&&i<20);
    qsort(a, i, sizeof(int), cmp);
    if(i>=2)
        printf("%d\n",a[1]);
    return 0;
} 

5 8 -12 7 0
7
Press any key to continue

读数据那块不对
do
{
}while
语句读入a[0]就结束了(因为a[1] = 0)