在c中选择sscanf中的格式

时间:2015-05-07 07:08:13

标签: c string tokenize scanf

我正在尝试使用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()

2 个答案:

答案 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)