繁体   English   中英

我在C中使用sscanf有麻烦

[英]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()更加容易:

  1. 使用#define和字符串文字串联来形成格式。
  2. 最后使用" %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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM