简单从文件中读取一个双数组

时间:2016-09-22 15:16:25

标签: c++

我在一个文件中有两个数字(每行一个),我试图读入一个c ++数组。我使用下面的代码,但在运行时遇到以下错误:

  

分段错误:11

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;

int main () {
    string line;
    ifstream myfile ("temp2.csv");
    std::vector<double> myArray;
    int index = 0;
    if (myfile.is_open())
    {
        while (! myfile.eof() )
        {
            getline (myfile,line);
            cout << line << endl;
//            myArray[index++] << line;
            myArray[index++] = atoi( line.c_str() );
        }
        myfile.close();
    }

    else cout << "Unable to open file";

    return 0;
}

3 个答案:

答案 0 :(得分:2)

你做不到

push_back

这是一个空矢量。您需要#include <iostream> #include <fstream> #include <string> #include <vector> #include <stdlib.h> using namespace std; int main () { string line; ifstream myfile ("temp2.csv"); std::vector<double> myArray; int index = 0; if (myfile.is_open()) { while (! myfile.eof() ) { getline (myfile,line); cout << line << endl; // myArray[index++] << line; myArray.push_back(atoi( line.c_str() )); } myfile.close(); } else cout << "Unable to open file"; return 0; } 个元素。或者用足够的内存初始化它。

这应该有效:

std::vector<double> myArray;

答案 1 :(得分:1)

在这一行:

myArray[index++] = atoi( line.c_str() );

使用默认构造函数创建矢量。从文档中可以看出,默认构造函数创建了一个向量。

在这一行:

Cannot find protocol declaration for FIRMessagingDelegate.

您可以通过连续增加索引来访问向量中的元素。但是这些元素不存在且索引超出范围,因为向量是空的。在向量范围之外访问具有未定义的行为。

TL; DR你忘了在矢量中添加任何元素。

答案 2 :(得分:1)

代码远比它需要的复杂得多。一次读取一个值要简单得多:

std::vector<double> myArray;
double value;
std::ifstream myfile(temp2.csv);
if (!myfile) {
    std::cout << "Unable to open file\n");
    return EXIT_FAILURE;
}
while (myfile >> value)
    myArray.push_back(value);