[英]I am having trouble using sscanf in C
我有以下一行,
*"1 $This is an open field west of a white house, with a boarded front door.$ 2 -1 -1 -1"*
此str中包含六个值:房间号,描述,北,南,东,西
----'$'不应在描述struct variabl中输入
我已经成功地将sscanf用于前两个元素
sscanf(line, "%d",&room[count].room_number);
sscanf(line, "%*[^$]%*c%[^$]s", room[count].description);
但是我在检索北,南,东和西值时遇到了麻烦。
"%*[^$]%*[^$] %d"
是从str检索北值(应该为2)的合适定界符吗?
通过以下方式编写复杂的sscanf()
更加容易:
#define
和字符串文字串联来形成格式。 " %n"
测试成功。 这样可以使编码更清晰。 "%99[^$]"
是用于最多扫描99个非美元符号字符的说明符。 "%*[^$]%*[^$] %d"
之所以失败,主要是因为它没有扫描任何$
。
没有s
需要在年底"%99[^$]"
。 @aragaer
#include <stdio.h>
#include <stdlib.h>
#define F_PRE "*\""
#define F_RML " $"
#define F_RMR "$"
#define F_END "\"*"
int main(void) {
const char *line = "*\"1 $This is ... door.$ 2 -1 -1 -1\"*\n";
int Room_number, north, south, east, west;
char description[100];
int n = 0;
sscanf(line, F_PRE "%d" F_RML "%99[^$]" F_RMR "%d" "%d" "%d" "%d" F_END " %n",
&Room_number, description, &north, &south, &east, &west, &n);
if (n && (line[n] == '\0')) {
printf("%d <%s> %d %d %d %d\n", Room_number, description, north, south, east, west);
} else {
puts("Fail");
}
return 0;
}
输出量
1 <This is ... door.> 2 -1 -1 -1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.