Получение значений переменных из файла .txt в C ++ - PullRequest
0 голосов
/ 14 марта 2020

Я пишу решатель CFD на C ++, но я в самом начале. Теперь я кодирую решатель для линейной конвекции. Математика в порядке, работает хорошо, но мне нужно написать также код для чтения переменных из файла .txt. Мой код:

//Code for solving the convection linear equation from Navier-Stokes

#include <iostream>

using namespace std;

int main()
{
    float endtime=0.3; //simulation time
    float dx=0.025;  //element size
    float xmax=2;  //domain size
    float c=1;  //wave velocity
    float C=0.3;  //Courant-Friedrich-Lewy number
    float dt=C*dx/c;  //defining timestep by the Courant equantion
    int nx=xmax/dx + 1;  //defining number of elements
    int nt=endtime/dt;  //defining number of time points

    float u[nx] = { }; //defining an initial velocity array.
    float un[nx] = { };

    for(int i = 4; i <= 9; i++) //defining contour conditions
    {
        u[i] = 2;
    }
    for(int n=1; n<=nt; n++)
    {
        std::copy(u, u + nx, un);
        for(int i=1; i<=nx; i++)
        {
            u[i] = un[i] - c*(dt/dx)*(un[i]-un[i-1]);

        }
    }
    for (int i = 0; i <= nx; i++) 
    {
       cout << u[i] << endl;
    }

    return 0;
}

Мне нужно взять значения этих переменных из .txt, такие как время окончания, размер элемента и т. Д. c. Затем у меня есть .txt, называемый «параметры», который в точности написан так:

endtime=0.3
dx=0.025
xmax=2
c=1
C=0.3

Какой самый эффективный способ получить значения этих переменных из этого .txt и использовать его в коде?

1 Ответ

4 голосов
/ 14 марта 2020

Использование только стандартных функций:

#include <iostream>
#include <tuple>
using namespace std;

tuple<bool, string, string> read_one_value(istream& in)
{
    string name;

    if(getline(in, name, '='))
    {
        string value;

        if(getline(in, value))
        {
            return make_tuple(true, name, value);
        }
    }

    return make_tuple(false, "", "");

}


int main()
{
    for(auto val = read_one_value(cin); get<0>(val); val = read_one_value(cin))
    {   
        std::cout << get<1>(val) << " -> " << get<2>(val) << '\n';
    }

    return 0;
}

Это оставляет преобразование из строковых объектов value в нужный тип в качестве упражнения для читателя и предполагает, что ваш формат name=value соответствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...