有没有大佬能解释一下 if(!check(st.sfz)) 这段代码的作用是什么而且在check前面加个!又是什么意思。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct person
{
char name[20];
char sfz[19];
int age;
};
int check(char *s)
{
int i,z,sum=0;
int qz[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int m[]={'1','0','X','9','8','7','6','5','4','3','2'};
for(i=0;i<17;i++)
{
if(*s>='0'&&*s<='9')
{
sum=sum+(*s-'0')*qz[i];
s++;
}
else
return 0;
}
z=sum%11;
if(m[z]==*s)
return 1;
else
return 0;
}
void save()
{
FILE *fp1,*fp2;
person st,t[20];
int i,n=0;
if ((fp1=fopen("stud.dat","rb"))==NULL)
{
printf("Can not open this file.\n");
exit(0);
}
if ((fp2=fopen("result.dat","wb"))==NULL)
{
printf("Can not open this file.\n");
exit(0);
}
while(fread(&st,sizeof(struct person),1,fp1)==1)
{
if(!check(st.sfz)) //问题所在位置//
t[n++]=st;
}
for(i=0;i<n-1;i++)
fprintf(fp2,"%s,",t[i].name);
fprintf(fp2,"%s",t[n-1].name);
fclose(fp1);
fclose(fp2);
}
int main()
{
save();
return 0;
}
0 个回答
太寂寞了,都没有人过来聊~