1

有没有办法控制scanf()如何分离输入?

scanf("%10s %10s", array1, array2);

以上工作正常,按空格分隔。但是,我可以使用不同的分离信号吗?

因为如果我想用逗号而不是空格拼接输入,这些似乎都不起作用:

scanf("%10s,%10s", array1, array2);
scanf("%10s, %10s", array1, array2);

是什么赋予了?我正在阅读的一本书声称可以使用任何字符将输入与scanf()分开,但未能解释如何做到这一点。此外,如果可以使用替代字符,是否也可以使用比单个字符更广泛的标准?(即值类型、语句等)

4

3 回答 3

2

使用字符类:

#include <stdio.h>

int main(int argc, const char **argv) {
  char s1[10], s2[10];
  const char *str = "word1,word2";
  sscanf(str, "%[^,],%s", s1, s2);
  printf("%s -- %s\n", s1, s2);
  return 0;
}

或者你可以更具体:

sscanf(str, "%[^,],%[^,]", s1, s2);

这也将捕获空白s2

要拆分多个字符,您可以使用strstr

#include <stdio.h>
#include <string.h>
int main(int argc, const char **argv) {
  const char *str = "word1fooword2fooword3", *foo = "foo", *ptr;
  const char *eofstr = str;
  for (ptr = str; eofstr; ptr = eofstr + strlen(foo)) {
    char word[10];
    eofstr = strstr(ptr, foo);
    if (eofstr) {
      size_t len = eofstr - ptr;
      strncpy(word, ptr, len);
      word[len] = 0;
      printf("%s\n", word);
    } else {
      strcpy(word, ptr);
      printf("%s\n", word);
    }   
  }
  return 0;
}
于 2013-01-07T00:52:11.617 回答
1

您实际上需要更改 scanf 的默认分隔符。这是您问题的确切答案。

http://gpraveenkumar.wordpress.com/2009/06/10/how-to-use-scanf-to-read-string-with-space/

于 2013-01-07T00:38:19.473 回答
1

您可以在 rect parentesis 之间使用它来“转义”字符分隔符,但老实说,我从未使用过该解决方案。相反,您可以使用fgetssscanf。在我看来,这是一种更“可靠”的方式。fgets 可以从标准输入读取,sscanf 可以在字符串中查找逗号和任何其他字符。同样, fgets 使用 ctrl+c 返回 null , sscanf 返回成功读取的次数。希望这可以帮助。

于 2013-01-07T00:45:04.647 回答