簡體   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