2013-07-08 57 views
2

我試圖從在C文件,該文件將始終格式化這個類型的行讀取數據:FSCANF和分隔符

16 Oct 2013 00:01:00.000,0.000,0.000000 

這是一個字符串,一個逗號,一個浮點數,逗號,一個浮點數,以及一個\n

我越來越怪異的東西,我一開始只有字符串嘗試,我意識到了這一點:

fscanf(filefd, "\n%24[^,]s", data); 
fscanf(filefd, ",%5s", data2); 

fscanf(filefd, "\n%24[^,]s,", data); 
fscanf(filefd, "%5s", data2); 

fscanf(filefd, "\n%24[^,]s,%5s", data, data2); 

爲什麼第一種情況下工作,其他兩個不?如果我把逗號放在變量前面,那麼在格式字符串的開頭,它就會起作用。如果我將逗號放在其他格式字符串中,但最後我會在data2中得到逗號。最後,如果我把它放在一起,data2沒有任何有效的數據,但data了。

我是否錯過了一些可以獲得這種奇怪行爲的東西?

+0

謝謝你,謝謝你的更正,我不是英語母語的,我通常會犯錯! – markmb

回答

3

%[]相應參數類型已經是一個字符串,因此]後尾隨s是不需要的,以指示一個字符串對象,因此預計將存在於輸入信息流中。在所有情況下,在]之後輸入停止消耗,因爲s不存在,將,留在輸入流中。

的第一個片段的作品,因爲它處理單獨的]s,,因爲s,不輸入流中出現在最後兩個片段沒有,因此失敗。

請務必檢查返回值fscanf()以確定成功分配的次數。

+0

昨天一個簡單的額外讓我發瘋。這麼簡單,現在的工作和預期一樣完美。 – markmb