从ifstream读取输入为双精度并用c ++执行计算

时间:2014-02-16 02:22:11

标签: c++

我已经在这个项目上工作了一段时间,我们使用ifstream来读取文本文件的输入。文本文件包含一个双精度数组(每个都应该代表电路的电阻):

1 1 1
0.5 0.5 1
2 3 1 
例如,

。该程序应该读取这些双打中的三个系列并计算总阻力(1/(1/R1+1/R2+1/R3))。我的问题是如何以双打的方式阅读这些内容。我知道如何以字符串形式阅读它们并编写了一些我应该工作的代码(但显然没有)。如果你能指出我正确的方向并给我一点帮助,我将不胜感激!谢谢!

我的代码:(很高兴)

int main()
{
    ifstream in("input.txt");
    vector<vector<string>> data;
    string resistors;
    while (in)
    {
        if (!getline(in, resistors))
            break;
        istringstream line(resistors);
        vector<string> record;
        while (line)
        {
            if (!getline(line, resistors, ','));
            break;
            record.push_back(resistors);
        }
        string totalResistance;
        for (int c = 0; c < resistors.length(); c += 3)
        {
            totalResistance += 1 / ((1 / resistors[c]) + (1 / resistors[c + 1]) + (1 / resistors[c + 2]));
        }
        cout << totalResistance << endl;
        data.push_back(record);
    }
    if (!in.eof())
    {
        cerr << "STOP!" << endl;
    }
}

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

ifstream input;
input.open("filename", ios::in);
double value_1 = 0, value_2 = 0, value_3 = 0;
input >> value_1 >> value_2 >> value_3;

这是您可以用来读取由空格分隔的三个值的最简单方法。一个稍微复杂的方法是如果你想逐行阅读。在这种情况下,您需要获取可以分隔双值的子字符串。

ifstream input;
input.open("filename", ios::in);
while (!input.eof())
{
     double values[3];
     string delimiter = " ", token, line;
     size_t pos, index = 0;
     getline(input, line);
     while ((pos = line.find(delimiter)) != std::string::npos) 
     {
         token = line.substr(0, pos);
         istringstream i(token);
         i >> values[index++];
         line.erase(0, pos + delimiter.length());
     }
     istringstream i(line);
     i >> values[index];

}

我没有执行代码,我希望它可以工作。请包含必要的头文件。