最大最小单词简略版(The Biggest and Smallest Words)自己的代码有个地方不懂

为什么最后输出Smallest word时,输出a[1]结果正确,而输出a[0]结果不正确?求解啊!!
最大最小单词简略版(The Biggest and Smallest Words)

编写程序找出一组单词中“最小”单词和“最大”单词。

用户输入单词后,程序根据字典顺序决定排在最前面和最后面的单词。

当用户输入4个字母的单词时,程序停止读入。假设所有单词都不超过20个字母。

输出范例1:




```Enter word: dog
Enter word: zebra
Enter word: rabbit
Enter word: catfish
Enter word: walrus
Enter word: cat
Enter word: fish

Smallest word: cat
Largest word zebra

输出范例2:

Enter word: computer
Enter word: ink
Enter word: light
Enter word: bookrack
Enter word: book

Smallest word: book
Largest word: light

#include <stdio.h>
#include<string.h>
#define WIDTH 100
#define LENGTH 20
int main ()
{
    char a[WIDTH][LENGTH+1],str[100]={"\0"};
    int i,j,k,m;
    for(i=0;j!=4;++i)
    {
        printf("Enter word:");
        scanf("%s",&a[i]);
        j=strlen(a[i]);
    }
    for(j=0;j<i;++j)   //冒泡排序法
    {
        for(k=0;k<i-j;++k)
        {
            if(strcmp(a[k],a[k+1])>0)
            {
                strcpy(str,a[k]);
                for(m=0;m<21;++m)
                a[k][m]='\0';
                strcpy(a[k],a[k+1]);
                for(m=0;m<21;++m)
                a[k+1][m]='\0';
                strcpy(a[k+1],str);
            }
        }    
    }
    printf("Smallest word:%s",a[1]);  
    printf("Largest word:%s",a[i]);
    return 0;
}

#include <stdio.h>
#include<string.h>
#define WIDTH 100
#define LENGTH 20
int main ()
{
    char a[WIDTH][LENGTH+1],str[100]={"\0"};
    int i,j,k,m;
    for(i=0;j!=4;++i)
    {
        printf("Enter word:");
        scanf("%s",&a[i]);
        j=strlen(a[i]);
    }
    for(j=0;j<i;++j)   //冒泡排序法
    {
        for(k=0;k<i-j-1;++k)
        {
            if(strcmp(a[k],a[k+1])>0)
            {
                strcpy(str,a[k]);
                strcpy(a[k],a[k+1]);
                strcpy(a[k+1],str);
            }
        }    
    }
    printf("Smallest word:%s\n",a[0]);  
    printf("Largest word:%s\n",a[i-1]);
    return 0;
}

img