2010-04-12 41 views
3

我有一個科學應用程序,我想在運行時輸入初始值。我可以選擇從命令行獲取它們,或者從輸入文件中獲取它們。這些選項都被輸入到通用解析器中,該解析器使用strtod爲每次模擬運行返回初始值的鏈接列表。我使用命令行參數或getline()來讀取值。在C中運行時分析浮點數的標準方法是什麼?

的問題是,我應該我自己的滾動解析器,或者我應該使用一個分析器發電機或一些圖書館?標準方法是什麼?這是我將在運行時讀取的唯一數據,其他所有內容都是在編譯時設置的(除了輸出文件和其他一些完全簡單的東西)。

感謝,

喬爾

+0

你只打算讀了一堆漂浮的?你想要做什麼樣的解析?你有什麼語法嗎? – LB40 2010-04-12 15:06:55

+0

是的,只有一堆由空白隔開的花車。我正在用strtok讀取它們,用換行符或逗號分隔。我問的原因是,這似乎相當複雜,我想知道我是否正在使用正確的工具。這並不是說我介意它是相當複雜的,但它是一種看上去簡單和常用的一件事情,所以好像有應該是這樣做的標準方法:什麼東西在libc的手冊沒有找到。 – 2010-04-13 14:50:32

+0

解決了這個問題:我正在使用strtod。真正的問題是我需要正確分解問題,以便正確的輸入行進入正確的數據結構。 – 2010-04-15 14:33:41

回答

5

還檢查了雙打strtof()的花車,關於strtod()。

+0

+1。請注意,'strtof'和'strtold'(長雙)是C99規範的一部分。對於C89/C90,堅持'strtod'。 在我看來,'sscanf'經常是矯枉過正的,'atof'就像是一個淡化版本的'strtod',沒有任何方法來檢查錯誤。 – tomlogic 2010-04-12 20:56:24

+0

'strto *()'通常是處理這類事情的正確方法,因爲它具有定義良好且有用的錯誤處理語義。 – 2010-04-14 18:08:38

3
sscanf 

可能是分析它們的標準方式。

不過,也有一些問題sscanf的,特別是如果你解析用戶輸入。

,當然,

atof 
+2

沒有理由使用'atof'。 – 2010-04-12 17:27:17

+0

這可能是真的,但你也可以說,爲什麼沒有好的理由使用它... – 2010-04-12 17:59:55

+2

使用atof()時很難做適當的錯誤檢查。這裏有幾個關於strto *()的優點的問題。 – Ioan 2010-04-12 20:13:55

0

一般來說,我更喜歡有數據輸入來自一個文件(例如,用於在運行的初始條件,總數時間步長等),和標誌輸入來自命令行(例如,輸入文件名,輸出文件名等)。這允許文件被存檔並再次使用,並允許將註釋嵌入到文件中以幫助解釋輸入。

如果輸入文件具有常規格式:
對於解析,請從文件中全文讀入,並使用sscanf將該行「解析」爲變量。

如果輸入文件有一個不規則的格式: 修復文件格式,以便它是有規律的(如果這是一個選項)。 如果不是,那麼strtof和strtod是最好的選擇。

+0

我的確在第一段中提供了很多建議。但是,如果用戶(我)願意,用戶可以選擇在命令行上提供列表。我通常不會這樣做,但在快速調試會話期間它可能很有用。 – 2010-04-15 14:32:37

相關問題