作者tropical72 (藍影)
看板C_and_CPP
標題Re: [問題] 請問陣列裡的空白欄位要怎麼讀?
時間Thu Jan 13 18:44:47 2011
原文恕刪
我想您應該是怕變數抓不到正確的對應值,
這裡提供之前的解決方式
變數名 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