我正在分配電話簿。我必須從以特定格式給出的交付檔案中獲取資料。姓名 | 姓氏 | 我正在使用以下代碼的電話號碼:
while(!feof(file)){
int result = fscanf(file, "s | 9s | %d", p->name, p->last_name, &p->number);
if (result == 3){
p ;
counter ;
if (counter > size 1){
break;
}
}
}
它適用于簡單的情況,例如:Jim | 凱瑞 | 123456 但輸入為 Louis 時會中斷 | 小戈塞特 | 502521950 然后這個函式寫入姓名 Louis Surname Gossett(缺少“.Jr”并且電話號碼留空,結果回傳 2,這使得輸入無效......我該如何解決這個問題?
我嘗試使用格式說明符 [^...] 進行一些嘗試,但我無法真正弄清楚這是否是正確的思維方式以及它們實際上是如何作業的。每當我添加一些東西時,一切都完全崩潰了。我要補充一點,要求是不要使用陣列或函式分配記憶體:(
uj5u.com熱心網友回復:
帶有 %s 格式說明符的 Fscanf 將讀取一個單詞并在遇到空格(換行符、空格或制表符)時停止。這就是為什么姓氏沒有被完整閱讀的原因。您正在閱讀Luis,Gossett但 %d 無法閱讀字串Jr.
您可以使用%[^|]|讀取整個字串(姓名或姓氏)。
嘗試fscanf(file, "[^|]|9[^|]|%d", p->name, p->last_name, &p->number);
在 fscanf 呼叫之后這樣的事情應該清除尾隨空格,但可能還有其他方法可以做到這一點。
if (p->name[strlen(p->name)-1] == ' ')
p->name[strlen(p->name)-1] = '\0';
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448790.html
下一篇:在Java中替換部分字串的問題
