使用[^…]的fscanf格式输入的正确格式?

使用[^…]的fscanf格式输入的正确格式?,c,scanf,C,Scanf,我正在尝试读取格式为#string 1###string 2##等的文件,使用“#”符号作为唯一的分隔符。我还试图将每个字符串复制到一个char数组中。下面是我当前的一些代码,但它似乎不起作用: char temp[20]; if(fscanf(fp, "%15[^#]", temp ==1) .... fp被打开并声明,并且该语句始终显示为false(扫描失败) 想法?我想你可能需要: if(fscanf(fp, "#%15[^#]#", temp) ==1) 我写了一封信。请随意更改以满

我正在尝试读取格式为#string 1###string 2##等的文件,使用“#”符号作为唯一的分隔符。我还试图将每个字符串复制到一个char数组中。下面是我当前的一些代码,但它似乎不起作用:

char temp[20];
if(fscanf(fp, "%15[^#]", temp ==1) ....
fp被打开并声明,并且该语句始终显示为false(扫描失败)


想法?

我想你可能需要:

if(fscanf(fp, "#%15[^#]#", temp) ==1)
我写了一封信。请随意更改以满足您的需要:)

#包括
#包括
内部主(空){
字符输入[]=“#字符串1##字符串2##三##最后一个但有一个##五个”;
char-tmp[100];
char*pinput=输入;
/*转换规范为
**                      %99[^#]
**另一个“#”是必须匹配的文本*/
而(sscanf(pinput,#%99[^#]#,tmp)==1){
printf(“得到[%s]\n”,tmp);
pinput+=strlen(tmp)+2;
}
返回0;
}

它是否适用于良好的ole scanf(或stdin文件)?我刚刚注意到,您正在将相等比较的结果作为参数传递给1。这是打字错误还是您的实际代码?您需要绕过输入中的
“#”
#include <stdio.h>
#include <string.h>

int main(void) {
  char input[] = "#string 1##string two##three##last but one##five#";
  char tmp[100];
  char *pinput = input;
  /* the conversion specification is
  **                      %99[^#]
  ** the other '#' are literals that must be matched */
  while (sscanf(pinput, "#%99[^#]#", tmp) == 1) {
    printf("got [%s]\n", tmp);
    pinput += strlen(tmp) + 2;
  }
  return 0;
}