向各位大佬求助 我关于sscanf很困惑 输入样例(截取自官方数据network13.in):
2
Server 89.51.19.26:5345
Client .65.87.185:10601
如果在主函数中用sscanf(s3,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);提取整数时,
abcde的取值分别是
89 51 19 26 5345
89 51 19 26 5345(两组一样)。
如果在子函数中用sscanf(s3,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);提取整数时,
abcde的取值分别是
89 51 19 26 5345
7536160 0 1577808 0 35
主函数代码:
for(int i=1;i<=n;i++){
int a,b,c,d,e;
cin>>s>>s3;
int x=0,y=0;
for(int j=0;j<strlen(s3);j++){
if(s3[j]==':')x++;
if(s3[j]=='.')y++;
}
if(x!=1||y!=3){
cout<<"ERR"<<endl;
continue;
}
sscanf(s3,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
printf("%d %d %d %d %d\n",a,b,c,d,e);
子函数代码:
bool check(char s[])
{
int cnt1=0,cnt2=0,a,b,c,d,e;
char t[26];
for(int i=0;i<strlen(s);i++)
{
if(s[i]=='.') cnt1++;
if(s[i]==':') cnt2++;
}
if(cnt1!=3||cnt2!=1) return 0;//.:的数量不够
sscanf(s,"%d.%d.%d.%d:%d",&a,&b,&c,&d,&e);
printf("%d %d %d %d %d\n",a,b,c,d,e);
if(f(a)||f(b)||f(c)||f(d)||e<0||e>65535)
return 0;
sprintf(t,"%d.%d.%d.%d:%d",a,b,c,d,e);
if(strcmp(s,t)==0) return 1;
else return 0;
}