2009-09-23 156 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