有人说我这代码错了,我找不到了,各位能帮我看看吗
//整体思路
//首先将前17位数字加权求和,计算的和模除11得到z码的值,对比M码判断身份证有效性
//身份证错误不输出没有报错
//输入第一行给出正整数N(<= 100)是输入的身份证号码的个数。 随后N行,每行给出1个18位身份证号码
#include
main()
{
int n;
scanf("%d",&n);//判断几个
char c[n][18];
char g=getchar();
int j,i;
for(j=0;jgets(c[j]);
int b[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//权重
int z[11]={0,1,2,3,4,5,6,7,8,9,10};//z码
char a[11]={'1','0','X','9','8','7','6','5','4','3','2'};//M码
int m=1,l=0,p;
for(j=0;jint s=0;
for(i=0;i<17;i++)
{
if(c[j][i]=='X')
{
int h=10;
s=s+h*b[i];
continue;
}
s=s+((int)c[j][i]-48)*b[i];
}
int t=s%11;
char f=a[t];
int flag=0;
int k;
if(f==c[j][17])
flag=1;
if(flag)
{
for(k=0;k<18;k++)
printf("%c",c[j][k]);
}
printf("\n");m*=flag;
if(m==1)
{int v;v=(int)c[j][16];
printf("passed\n");
if(v%2==1) printf("male\n"); else printf("female\n");
}else {for(k=0;k<18;k++)
printf("%c",c[j][k]);printf(" error\n");
}
}
}