2015-02-07 145 views
0

我在使用scanf時遇到了一些麻煩。我想讀的投入將是這種格式:使用scanf分隔冒號的問題

string:integer: 

例如,ptest/src/test.c:19:blahblahblah

將是一個有效的字符串。我想存儲p2test/src/test.c19。不過,我碰到的一些問題,即19沒有得到在讀

這裏就是我想:

#include <stdio.h> 

int main() { 
     char *str; 
     char *i; 
     int n = 0; 
     scanf("%m[^':'], %m[^':']", &str, &i); 

     printf("# inputs read: %d\n", n); 
     printf("%s\n", str); 
     printf("%s\n", i); 
     return 0; 


} 

最終,我得到了1個輸入閱讀與ptest/src/test.c是打印。另一個問題是我使用的m標誌從gcc獲取警告。我正在使用C89,並且在使用a時也收到了相同的警告。

回答

1

看起來格式是錯誤的,你想讀冒號,沒有逗號。試試這個:

scanf("%m[^':']:%m[^':']", &str, &i); 

希望這會有所幫助。

+0

哦,我明白了。你介意在中間作品中如何用冒號代替逗號? – mrQWERTY 2015-02-07 21:44:54

+0

你想告訴'scanf'你所期望的輸入字符串的格式。格式化字符串'「%m [^':']:%m [^':']」'可以理解爲:取一個除冒號('%m [^':']')存儲它,然後冒號(':'),然後再取另一個字符串,它包含冒號('%m [^':']'),並將其存儲。如果你把它保存爲''%m [^':'],%m [^':']「',那就意味着:找到一個字符串,然後找到一個逗號和一個空格,然後找到另一個字符串。 – jadhachem 2015-02-07 21:53:03