用puts输出数组中的字符串,该如何处理

用puts输出数组中的字符串
int main()
{
char a[100],w[100],c[100];
int i=0,k=0,l=0;
gets(a);
while(a[i]!='\0')
{
if(a[i]>'a'&&a[i]<'z')
{
w[k]=a[i];
k++;
}
else
{
c[l]=a[i];
l++;
}
i++;
}
scanf("\0",&w[k]);
scanf("\0",&c[l]);

puts(w);
puts(c);
return 0;
}

为啥以上程序不能输出w和c中的字符串???
------解决思路----------------------
scanf("\0",&w[k]);
scanf("\0",&c[l]);

改为:
w[k] = '\0';
c[l] = '\0';


puts是对字符串进行处理,需要‘\0’来结束


------解决思路----------------------
我猜你是想把大写字母和小写字母区分开来,对吗?
如果是这样,有几处要改动:

int main()
{
char a[100], w[100], c[100];
int i = 0, k = 0, l = 0;
gets(a);
while (a[i] != '\0')
{
if (a[i] >= 'a' && a[i] <= 'z')
{
w[k] = a[i];
k++;
}
else
{
c[l] = a[i];
l++;
}
i++;
}
//scanf("\0", &w[k]);
//scanf("\0", &c[l]);
w[k] = '\0';
c[l] = '\0';
        printf("w=");
puts(w);
        printf("c=");
puts(c);
return 0;
}

//alskdDSAasdWEFasd
//w=alskdasdasd
//c=DSAWEF


------解决思路----------------------
w中存放小写字母
c中存放大写字母