如何强制scanf匹配空白?

如何强制scanf匹配空白?,c,scanf,format-specifiers,character-class,C,Scanf,Format Specifiers,Character Class,我正在尝试使用fscanf()读取必须前后加空格的字符: fscanf( input, "%*[ \t]%c%*[ \t]", output ) 但不幸的是,“%*[\t]”格式说明符接受零个或多个匹配项。无论如何,我是否可以要求它至少接受一个匹配,或者我是否需要使用类似于getc()?使用fscanf()可以解决此帖子,但让我们看看fgetc()方法 // return 1 on success, else return 0 int GetSpaceCharSpace(FILE *istre

我正在尝试使用
fscanf()
读取必须前后加空格的字符:

fscanf( input, "%*[ \t]%c%*[ \t]", output )

但不幸的是,
“%*[\t]”
格式说明符接受零个或多个匹配项。无论如何,我是否可以要求它至少接受一个匹配,或者我是否需要使用类似于
getc()

使用
fscanf()
可以解决此帖子,但让我们看看
fgetc()
方法

// return 1 on success, else return 0
int GetSpaceCharSpace(FILE *istream, int *ch) {
  *ch = fgetc(istream);
  if (!isspace(*ch))
    return 0;

  // consume additional leading spaces as OP said "accept at least one match"
  while (isspace(*ch = fgetc(istream)))
    ;
  // Code has a non-white-space

  // Success if next char is a white-space
  return isspace(fgetc(istream));
}

fscanf
和空格不太合拍,所以我建议您最好使用
fgetc
一次获取一个字符,或者
fgets
一次获取一行,然后自己进行解析。
fscanf()
不用于正则表达式匹配。类似于
char sp1[2],sp2[2],output;如果(3==fscanf(输入,“%1[\t]%c%1[\t]”,sp1,&output,sp2))良好()
仍同意@user3386109BTW:
“%*[\t]”
不接受零匹配。如果匹配零个字符,
[
说明符将失败(中止读取)。如果您发布了一些似乎与预期不匹配的示例输入,则可能会有所帮助