2014-12-05 78 views
-4

我解析配置文件中的一行。它有以下格式:scanf訣竅得到解析正確

[email protected] 

我正在使用sscanf進行解析。

rcScanf = sscanf(paramPosition , "%d%2s", &(item->position) , positionFormat); 

這工作,因爲我可以檢查是否scanf能夠使2場比賽,我可以檢查strcmp位置格式,如果爲「PX」我很期待。問題是我想scanf得到完全「px」,而不是「pxxxxx」或其他東西。格式化字符串中有什麼技巧(如果有的話)能夠實現這個功能?

謝謝。

+0

確保'positionFormat'被掃描輸入後終止用''\ 0''。 – 2014-12-05 13:09:57

+0

在做任何事之前,我都會做一個memset。但謝謝你的提示。 – 2014-12-05 13:54:28

回答

1

使用%N:

int b=0,e=0,r,p; 

r = sscanf("[email protected]", "%d%[email protected]%n", &p, &b, &e); 

if(r==1 && e-b==3) 
    puts("success"); 
+0

我沒有這樣測試。如果參數行繼續,它會工作嗎?實際的格式就像我發送的例子的一個數組。像這樣:100px @ white; 200px @ black; 500px @ gray – 2014-12-05 13:53:27

+0

將整個字符串拆分爲';'與例如。 strsep,您可以使用上述解決方案 – user411313 2014-12-05 14:02:35

+0

注意:'r'不是必需的,但看起來不錯。可以簡化爲'if(e-b == 3)'。 – chux 2014-12-05 21:09:19

1

"%n"使用

int n = 0; 
sscanf(paramPosition, "%dpx%n", &(item->position), &n); 
if (n && paramPosition[n] == '@') Success();