c语言一个普通题目,不知道哪里错了

img


#include<stdio.h>
#include<string.h>
int main()
{
int a,b,c,i,j,k,l,cnt;
char str[20][201];
scanf("%d",&a);
b=1;
while(a--)
{
memset(str,'\0',sizeof(str));
scanf("%d",&c);
for(i=l=0;i<c;i++)
{
scanf("%s",str[i]);
if(l<strlen(str[i]))
{
l=strlen(str[i]);
}
}
cnt=0;
for(i=0;i<l;i++)
{
k=1;
for(j=1;j<c;j++)
{
if(str[0][i]==str[j][i])
{
;
}
else
{
k=0;
break;
}
}
if(k){
cnt++;
} else {
break;
}
}
printf("case %d: ",b++);
if(cnt>0)
{
for(i=0;i<cnt;i++)
{
printf("%c",str[0][i]);
}
}
printf("\n");
}
return 0;
}

代码稍微优化下,最后输出“Case %d: ”,修改 ,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    int a, b, c, i, j, k, l, cnt;
    char str[20][201];
    scanf("%d", &a);
    b = 1;
    while (a--)
    {
        memset(str, 0, sizeof(str));
        scanf("%d", &c);
        for (i = l = 0; i < c; i++)
        {
            scanf("%s", str[i]);
            if (i == 0)
                l = strlen(str[i]);
            else if (l > strlen(str[i]))
                l = strlen(str[i]);
        }
        for (i = 0, cnt = 0; i < l; i++)
        {
            for (j = 1, k = 1; j < c; j++)
            {
                if (str[0][i] != str[j][i])
                {
                    k = 0;
                    break;
                }
            }
            if (k) 
                cnt++;
            else 
                break;
        }
        printf("Case %d: ", b++);
        for (i = 0; i < cnt; i++)
        {
            printf("%c", str[0][i]);
        }
        printf("\n");
    }
    return 0;
}