出现这样的结果是为什么,应该如何修改代码




#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,sum;
    char a[100][18];
    int i,k,p;
    int b[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char c[17]={'1','0','X','9','8','7','6','5','4','3','2'};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a[i]);
    }
    for(i=0;i<n;i++)
    {
        m=0;
        sum=0;
        for(k=0;k<17;k++)
        {
            if(a[i][k]>='0'&&a[i][k]<='9')
            {
                m++;
                sum=sum+(a[i][k]-'0')*b[k];
            }
            else
            {
            printf("%s",a[i]);
            printf("\n");
            break;
            }
        } 
        sum=sum%11;
        if(c[sum]==a[i][17]) 
        p++;
        else  
        {
          printf("%s",a[i]);
          printf("\n");
        }
        if(p==n) printf("All passed");
        
    
    } 
} 


img

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/0814267725461

  1. 56.jpeg "#left")

修改如下,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    int n,m,sum;
    char a[100][20]; //char a[100][18];
    int i,k,p;
    int b[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char c[17]={'1','0','X','9','8','7','6','5','4','3','2'};
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a[i]);
    }
    for(i=0,p=0;i<n;i++)//for(i=0;i<n;i++)
    {
        //m=0;
        sum=0;
        for(k=0;k<17;k++)
        {
            if(a[i][k]>='0' && a[i][k]<='9')
            {
                //m++;
                sum=sum+(a[i][k]-'0')*b[k];
            }
            else
            {
                printf("%s\n",a[i]);
                //printf("\n");
                break;
            }
        }
        if(k < 17) continue;  //修改
                //sum=sum%11;
        if(c[sum%11]==a[i][17])
             p++;
        else
        {
            printf("%s\n",a[i]);
                //printf("\n");
        }
    }
    if(p==n) printf("All passed");//修改
    return 0;
}

程序要求是什么