身份证的奥秘,出现无效引用内存,求助
大神求助 这个某个测试显示无效引用内存 题目是身份证的奥秘程序代码:
#include<stdio.h> #include<string.h> int main() { char a[20]; int b[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int n,i,j,sum,m; scanf("%d",&n); for(j=0;j<n;j++) { scanf("%s",a); if(strlen(a)==18) { if(a[17]=='X') a[17]=10; else a[17]=a[17]-'0'; for(i=0;i<17;i++) a[i]=a[i]-'0'; for(i=0,sum=0;i<17;i++) { sum+=(a[i]*b[i]); } m=sum%11; if(m==1) m=0; else if(m==0) m=1; else m=(6-m)*2+m; if(m==a[17]) printf("Valid\n"); else printf("Invalid\n"); } else if(strlen(a)==15) { for(i=0;i<15;i++) a[i]=a[i]-'0'; for(i=14;i>5;i--) { a[i+2]=a[i]; } a[18]='\0'; a[6]=1; if(a[14]==9&&a[15]==9&&a[16]>5) a[7]=8; else a[7]=9; for(i=0;i<17;i++) printf("%d",a[i]); for(i=0,sum=0;i<17;i++) { sum+=(a[i]*b[i]); } m=sum%11; if(m==1) m=0; else if(m==0) m=1; else m=(6-m)*2+m; if(m==10) printf("X\n"); else printf("%d\n",m); } else printf("Invalid\n"); } }