簡體   English   中英

將.txt文件中的雙精度文件讀入雙數組c ++

[英]Read doubles out of .txt file into double array c++

我正在嘗試創建一個需要大量股票價格的程序。 我將這些價格存儲在.txt文件中,每行一個雙。 有一個未知的數字(可能是數千)。 我無法將數據轉換為可以操作的數組。 我現在幾個小時都無法解決這個問題。 每當我嘗試從文件中讀取數據然后將其轉換為double時,我會遇到奇怪的線程錯誤並且程序掛起。 任何人都可以告訴我如何將未知數量的雙打讀入陣列。

string line;
vector<double> doubles;

fstream myfile ("/Users/jaychinnaswamy/Documents/PMHistory.txt",std::ios_base::in);

int x=0;
float a;
while (myfile >> a)
{
    doubles[x]=a;
}

文件結構的一個例子是:

50.4000000000000

50.8000000000000

50.5000000000000

50.2100000000000

49.1500000000000

48.5000000000000

謝謝

你在這里創建了一個空矢量

vector<double> doubles;

在這里,你正在索引向量,好像它不是空的 它仍然是空的,您正在訪問無效元素。

doubles[x]=a;

將該代碼更改為使用std::vector::push_back()

doubles.push_back(a);

從我看到的代碼中明顯看出兩件事(已在評論中提到):

  1. 你不增加x
  2. 即使沒有增量,當雙精度沒有元素時,你可以訪問x == 0的doubles[x] 這是未定義的行為。 您需要提前分配元素或使用push_back根據需要增長向量。

您提交的代碼存在一些問題。 正如其他人所說,您已經實例化了一個空的std::vector並且您的代碼會對不存在的索引進行分配。 由於您的問題圍繞未知數量的元素(動態大小),因此請使用std::vectorpush_back方法。 我勸你不要從轉換floatdouble通過a 您知道數據是double並且您希望將其存儲為double ,因此請使用double 由於這只是代碼的一部分,因此您可以利用for循環使double a范圍綁定到數據加載。

您的代碼可以重寫為:

std::ifstream myfile("/Users/jaychinnaswamy/Documents/PMHistory.txt");
std::vector<double> doubles;
for (double a; myfile >> a;) {
    doubles.push_back(a);
}

但是,如果您不需要數據驗證,您知道該文件只包含雙精度數,並且您真的只想導入數字,然后使用std::vector的范圍構造函數通過std::istream_iterator為您讀取文件。

#include <fstream>
#include <iostream>
#include <iterator>
#include <vector>

int main() {
    std::ifstream myfile("/Users/jaychinnaswamy/Documents/PMHistory.txt");
    std::vector<double> doubles{(std::istream_iterator<double>(myfile)),
                                 std::istream_iterator<double>()};
}

特別注意std::vector范圍構造函數的第一個iterator參數周圍的() 沒有()會導致語法歧義,也稱為“最令人煩惱的解析”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM