scanf诀窍得到解析正确
我解析配置文件中的一行。它有以下格式:scanf诀窍得到解析正确
[email protected]
我正在使用sscanf进行解析。
rcScanf = sscanf(paramPosition , "%d%2s", &(item->position) , positionFormat);
这工作,因为我可以检查是否scanf
能够使2场比赛,我可以检查strcmp
位置格式,如果为“PX”我很期待。问题是我想scanf
得到完全“px”,而不是“pxxxxx”或其他东西。格式化字符串中有什么技巧(如果有的话)能够实现这个功能?
谢谢。
使用2×%N:
int b=0,e=0,r,p;
r = sscanf("[email protected]", "%d%[email protected]%n", &p, &b, &e);
if(r==1 && e-b==3)
puts("success");
我没有这样测试。如果参数行继续,它会工作吗?实际的格式就像我发送的例子的一个数组。像这样:100px @ white; 200px @ black; 500px @ gray – 2014-12-05 13:53:27
将整个字符串拆分为';'与例如。 strsep,您可以使用上述解决方案 – user411313 2014-12-05 14:02:35
注意:'r'不是必需的,但看起来不错。可以简化为'if(e-b == 3)'。 – chux 2014-12-05 21:09:19
"%n"
使用
int n = 0;
sscanf(paramPosition, "%dpx%n", &(item->position), &n);
if (n && paramPosition[n] == '@') Success();
确保'positionFormat'被扫描输入后终止用''\ 0''。 – 2014-12-05 13:09:57
在做任何事之前,我都会做一个memset。但谢谢你的提示。 – 2014-12-05 13:54:28