Re: [問題] sscanf的奇怪問題@@?

看板C_and_CPP (C/C++)作者 (亨利喵)時間15年前 (2011/04/30 16:59), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串5/5 (看更多)
※ 引述《tropical72 (藍影)》之銘言: : 恕刪 : 推 james732:推板主 04/29 13:53 : 推 bestwishes:我也喜歡這種作法 在JAVA底下尤其好做 04/29 13:57 : 推 xatier:推板主,這個解更棒 04/29 14:25 : 推 piness:謝謝版主!!又多學了一招 04/29 14:35 : 推 tropical72:我比較建議原本的空白先取代成 ASCII(255),看起來也是 04/29 20:53 : → tropical72:空白,再用ASCII(20)去取代沒意義的東西.再將255取回來, 04/29 20:53 : → tropical72:我常遇到的問題便是原先空白不可抹掉 04/29 20:54 : → tropical72:取回動作通常不做,因看起來都是 space XD 04/29 20:55 : 修正,上述的 ASCII(20) 應為 ASCII(32),進制記錯 : : 可是這會有signed/unsigned的問題, 請問有除了255以外的解決方案嗎? : : 想到用 '\t' 之類的應該也可以, 只是沒試過~ : 的確 signed/unsigned 問題之前沒實際考量過, : 但若單純為 sscanf 使用,使用 ASCII 255 應為合理, : 當然較保險的方式是 #define / const 一個出來 : const unsigned char FALSE_SPACE_UNI = (unsigned char)(0xff) : const char FALSE_SPACE_SIG = ( char)(0xff) : 之所以不再取代回去,純粹是因為「看起來像」是 space,實際上卻不是 ASCII(32), : 若考慮寫入檔案日後仍有維護之需求,才有必要再將 ASCII(255) 換回 ASCII(32) : 至於再換成 '\t' ,那又回到了解這問題的原點: : sscanf\scanf 是以 white space 為斷點,其中便包含了 ' ', '\t', '\n' : 所以換成 '\t' 應不適用於這裡 : 三個字元,會找一個「看起來是空白,實際上卻不是空白」的去取代, : 純粹是為了避開此問題,目前用這種方式處理倒是還沒出過包, : 如此方式有問題的話也請不吝指正,避免日後出包不知道怎麼死的。 : 程式碼大概如下 : #include <stdio.h> : #include <string.h> : void replace(char *str) : { : char* ptr=strchr(str, ' '); : while(ptr!=NULL){ : *ptr = 255; : ++ptr; : ptr = strchr(ptr, ' '); : } : } : int main() : { : char demo[] = "goodbye my love\nptt cpp\nthis is a test\n"; : char str1[200], str2[200], str3[200]; : printf("%s\n", demo), replace(demo); : sscanf(demo, "%s%s%s", str1, str2, str3); : printf("str1:%s\n", str1); : printf("str2:%s\n", str2); : printf("str3:%s\n", str3); : return 0; : } : 此處便不把 str1, str2, str3 之 255 replace 回來,輸出結果「看」起來正常. 我可能沒有非常懂你的解法。 可是你要的結果,不是這樣就好了? scanf很好用呀... #include <stdio.h> int main() { char demo[] = "goodbye my love\nptt cpp\nthis is a test\n"; char str1[200], str2[200], str3[200]; sscanf(demo, "%[^\n]\n%[^\n]\n%[^\n]\n", str1, str2, str3); printf("str1:%s\n", str1); printf("str2:%s\n", str2); printf("str3:%s\n", str3); return 0; } -- I'm CAT (Combinatorics, Analysis, and Topology) About Me : http://columbia.edu/~mt2767 想找程式或數學家教,還是發包程式案件嗎? http://w.csie.org/~b95028/parttime.php -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.90.67 ※ 編輯: scan33scan33 來自: 140.112.90.67 (04/30 17:04)

05/01 15:11, , 1F
真正的高手!
05/01 15:11, 1F
文章代碼(AID): #1Dky-8d4 (C_and_CPP)
文章代碼(AID): #1Dky-8d4 (C_and_CPP)