我正在尝试使用c语言中的<div class="col-xs-12 col-sm-6">
解析字符串Connected to a:b:c:d completed (reauth) id=5
。
我的格式字符串是sscanf()
。但在某些情况下,我的字符串是Connected to %s completed %s id=%s
。我没有得到Connected to a:b:c:d completed id=5
部分。
我可以使用两个reauth
来电。但我需要使用一个sscanf()
电话。有没有办法根据sscanf()
中的某些条件选择格式?
我正在尝试使用的示例代码
sscanf()
答案 0 :(得分:1)
是的,这是可能的。使用第一个格式字符串检查sscanf()
的返回值。如果它不等于预期的数字,请使用sscanf()
的其他格式字符串。
P.S。 - 我假设您只有 两种格式,可以以或 - 或方式显示。
编辑:
如果您想要更灵活,更强大且时尚的方式,并且如果您能够删除 sscanf()
的使用,您可以制作根据某些分隔符使用strtok
标记您的字符串,并从输入字符串中获取所需的值。
答案 1 :(得分:0)
#include<stdio.h>
int main() {
char* string1="Connected to a:b:c:d1 completed id=1";
char* string2="Connected to a:b:c:d2 completed (auth) id=3";
char* fmt = "Connected to %s %*[^=]=%d";
char b[60]={0};
int id = -1;
n=sscanf(string1, fmt, b, &id);
printf("Auth :: %s :: id :: %d - %d\n", b, id,n);
n=sscanf(string2, fmt, b, &id);
printf("Auth :: %s :: id :: %d - %d\n", b, id,n);
}
其中:
%[^=]
将使用非空字符串非&#34; =&#34;字符%*...
将丢弃通讯组(跳过它)如前所述,我们应该分析sscanf返回值if(sscanf ...==2)