2009-09-23 159 views
0

运行:“减” 不被捕获

#include <stdio.h> 

int main(int argc, char *argv[]) { 
    const char *exp = "10-2+3*5"; 
    char tok[255]; 
    sscanf(exp, "%[^+-*/^]", tok); 
    printf("%s\n", tok); 
    sscanf(exp, "%[^-+*/^]", tok); 
    printf("%s\n", tok); 
    return 0; 
} 

将输出:

10-2 
10 

但是,为什么?

+0

您是否意味着'/'的分裂,无论如何(而不是'\'来脱离插入符号)。 –

+0

我猜你不能用'\'来逃避它,这就是为什么你需要把它放在任何一端? – Ashwin

+0

@Jonathan是的,那是一个错字。 @Ashwin是的,它不能逃脱。 – MarkSteve

回答

2

将连字符放在[...]集的末尾。这与正则表达式类似。

sscanf的%[...]格式接受范围。一个范围可以这样使用:%[a-z]

为了区分匹配一个简单的连字符,你必须把它放在最后,所以它不被解释为一个范围。

您可以在sscanf manual page找到更多的文档。向下滚动到描述[模式的部分。

+0

是的。它不能逃脱,因此无论是先放还是后放。谢谢。 – MarkSteve