为什么sscanf主函数和子函数中表现不同
查看原帖
为什么sscanf主函数和子函数中表现不同
237570
hy1089knigh楼主2022/1/29 10:05

向各位大佬求助 我关于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;
}

2022/1/29 10:05
加载中...