C:使用scanf()构造输入

时间:2013-01-07 00:31:44

标签: c scanf

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

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

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

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

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

是什么给出的?我正在阅读的一本书声称可以使用任何字符将输入与 scanf()分开,但无法解释如何执行此操作。此外,如果可以使用替代字符,也可以使用比单个字符更广泛的标准吗? (即价值类型,陈述等)

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

你可以在直肠癌术之间“逃避”使用它的角色定界符,但说实话,我从未使用过这个解决方案。 相反,您可以使用fgetssscanf。在我看来,这是一种更“稳固”的做法。 fgets可以从stdin读取,sscanf可以查找字符串中的逗号和任何其他字符。 另外,fgets使用ctrl + c返回null,sscanf返回成功读取的次数。 希望这可以帮助。