如何從C++中的文件中讀取雙精度值?如何從C++中的文件中讀取雙精度值
對於整型我知道你可以使用函數getline(),然後的atoi,但我沒有找到一個數組的雙重功能。有什麼可用於讀取雙打,或將字符數組轉換爲雙精度?
如何從C++中的文件中讀取雙精度值?如何從C++中的文件中讀取雙精度值
對於整型我知道你可以使用函數getline(),然後的atoi,但我沒有找到一個數組的雙重功能。有什麼可用於讀取雙打,或將字符數組轉換爲雙精度?
您可以使用流提取:
std::ifstream ifs(...);
double d;
ifs >> d;
這項工作提供了其他然後空格,流中的下一個數據應該是在文字表述雙。
提取後,可以檢查流的狀態,看是否存在錯誤:
ifs >> d;
if (!ifs)
{
// the double extraction failed
}
這是錯誤的。測試流的失敗('.fail()',它與'.good()'相當於'.rdstate()== 0')的微妙差別。使用'if(!(ifs >> d)){/ *失敗* /}'或'ifs >> d;如果(!ifs){/*..*/}'或(通常更有用)'if(ifs >> d){/ * use d * /} else {/ * failed * /}'。 – 2010-04-10 21:47:08
(使用'!stream'與'stream.fail()'相同,使用'bool(stream)'和'!stream.fail()'相同。) – 2010-04-10 21:53:40
@RogerPate - 謝謝。 – 2010-04-11 02:15:06
您可以利用istringstream例如,這裏有toDouble和toInt:
double toDouble(string s) {
double r = 0;
istringstream ss(s);
ss >> r;
return r;
}
int toInt(string s) {
int r=0;
istringstream ss(s);
ss >> r;
return r;
}
這已經存在於升壓,在一個更好的形式,包括錯誤校驗功能,lexical_cast的。 – 2010-04-10 21:51:55
@Roger Pate:是的,它的確如此。儘管對於不能使用boost的情況,這很有用。 – 2010-04-10 21:56:14
@比利:它比atof更有用,Neil正確地[指出](http://stackoverflow.com/questions/2615078/how-to-read-in-a-double-from-a-file- in-c/2615119#2615119)應該被避免(除非你已經驗證了輸入,但在這裏不是這樣)。 – 2010-04-10 21:59:50
我想知道,做一件需要小心區域設置(例如,一個區域可以使用逗號而不是圓點分隔小數部分)還是字符串流總是默認爲一些標準的「C語言環境」符號?
爲什麼不把它作爲char *讀取並使用sscanf? – Cam 2010-04-10 21:43:23
@incrediman:因爲如果您已經在使用標準流,您可能不想處理C函數頭痛問題。 – 2010-04-10 21:54:07
如果你想堅持'getline()'然後'atoi()',你可以用'atof()'代替'atoi()',你應該沒問題。但@R塞繆爾克拉特科的方法應該適用於雙打和整數。 – 2010-04-11 03:35:44