有没有办法控制 scanf()如何分隔输入?
scanf("%10s %10s", array1, array2);
以上工作正常,按空间分隔。但是,我可以使用不同的分离信号吗?
因为如果我想用逗号而不是空格拼接输入,这些似乎都不起作用:
scanf("%10s,%10s", array1, array2);
scanf("%10s, %10s", array1, array2);
是什么给出的?我正在阅读的一本书声称可以使用任何字符将输入与 scanf()分开,但无法解释如何执行此操作。此外,如果可以使用替代字符,也可以使用比单个字符更广泛的标准吗? (即价值类型,陈述等)
答案 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)