2013-01-07 54 views
1

有沒有辦法控制如何分開輸入?C:使用scanf()構造輸入

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

上述工作很好,由空間分開。但是,我可以使用不同的分離信號嗎?

因爲這些都不似乎工作,如果我想用逗號拼接輸入,而不是一個空間:

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

是怎麼回事?我正在閱讀的一本書聲稱,可以使用任何字符將輸入與scanf()分開,但未能解釋如何這樣做。此外,如果可以使用替代字符,那麼可以使用比單個字符更寬的標準嗎? (即值類型,語句等)

回答

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

這適用於''word1,word2'',而我認爲它不應該(「*我想用逗號而不是空格拼接輸入*」)。這實際上使用逗號*和*任意數量的空格作爲分隔符,但也許我誤解了這個問題。 – effeffe

+0

太好了,謝謝。清晰的例子! – d0rmLife

+0

@effeffe,謝謝,更新了答案 – perreal

1

實際上您需要更改scanf的默認分隔符。這裏是你的問題的確切答案。

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

+0

我看到這是如何適用於何時分配給單個變量,但我很努力地看到如何用它來調製分配給許多變量。您能否提供一個如何正確使用該語法來執行此操作的示例? – d0rmLife

+0

其實你的問題不是那麼清楚......你能解釋一些例子嗎?你需要用不同的分隔符輸入多個變量嗎? –

+0

@perreal提供了一個工作示例。儘管感謝您的鏈接! – d0rmLife

1

你可以「逃離」字符分隔符使用它RECT parentesis之間,但說實話,我從來沒有使用的解決方案。您可以使用fgetssscanf。在我看來,這是一種更「堅實」的方式。 fgets可以從stdin中讀取,sscanf可以查找字符串中的逗號和其他任何字符。 另外,fgets用ctrl + c返回null,sscanf返回成功讀取的次數。 希望這有助於。

+1

謝謝,我會研究這些替代品。然而,逃跑命令是我正在尋求的! – d0rmLife

+0

很高興我能幫到你。祝你好運。 –