看板 C_and_CPP 關於我們 聯絡資訊
原文恕刪 我想您應該是怕變數抓不到正確的對應值, 這裡提供之前的解決方式 變數名 s1 s2 s3 ---------------------------- f111 m 111 f222 f 222 f 777 f444 m 444 方法一 - 觀察您給的結果,s1 變數長度固定是4, s2 長度固定是 1 所以先進行 scanf("%s", s1); if(strlen(s1)<4) { // s1 沒東西, 這個判斷可以很多種寫法 // if(strlen(s1)==1), if(strlen(s1)!=4)... etc strcpy(s2, s1); // s1 其實是 s2 s1[0]=0; // s1 清空 scanf("%s", s3); // 再把 s3 讀進來 } else { // s1 有東西 scanf("%s%s", s2, s3); } 方法二 - 用 gets + sscanf 的話,有些前置步驟 這方法其實是走後門,你去翻翻 ascii table ,看 ascii(255) 它顯示出來的 chacter 也是空白,但剛好就避開了 sscanf 以 white space 為斷點的問題 於是先寫一個 replace_char 副函式 void replace_char(char *str, char src, char des) { unsigned i=0; while(str[i]!=0){ if(str[i]==src) str[i]=des; ++i; } } 將 space 全換為 ascii 255,接著再去觀查, 要斷點的位置是在第幾個位置,我這裡假設是 4 和 9 再把 buffer[4] = buffer[9] = ' '; 設回來, 便可放心用 sscanf , 完整程式碼大概長這樣 http://codepad.org/yJl76jbp 要不要把 ascii 255 再換回 space 還是怎樣 接下來要怎麼處理就看你了, 這方法我想速度上應該比較慢,只是方便日後維護使用而已, (簡單的說,就是懶人在用的) 至於什麼時候要 replace_char、要在哪裡換、要不要換回, 你可以自己觀查決定。 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.76.142
kazuame:謝謝你:D 不過其實實際的長度不是固定的>< 我參考資料放的 01/13 19:21
kazuame:不對 真的對不起><不過這兩個方法也讓我學到很多:) 謝謝你 01/13 19:22