Проблема с c++ getline() в gcc

79
14 апреля 2021, 22:30

Потребовалось написать пару простеньких скриптов на c++. До этого когда-то писал в Visual Studio, сейчас сижу на linux(fedora 29), поэтому перешёл на gcc. Написал скрипт, который должен открывать файл с записанными измерениями сигнала (длина не известна заранее), считывать их в массив, а затем производить мат. обработку:

# include <iostream>
# include <fstream>
# include <string>
# include <vector>
# include <cstdlib>
int main() {
    const float m = 0.0008;
    float h = 1/200000000;
    int rpt = 1;
    int count = 0;
    int i, j, k;
    float c;
    std::string filename, outname;
    std::vector<double> signal;
    setlocale(LC_ALL, "rus");
    //Открытие файла
    std::cout << "Введите имя файла" << std::endl;
    std::cin >> filename;
    std::ifstream infile(filename);
    if (!infile.is_open())
        std::cout << "File not found!" << std::endl;
    else {
        std::string buffer = "";
        while (!infile.eof()) {
            while (std::getline(infile, buffer, ",")) {
                 double value = atof(buffer.c_str());
                 signal.push_back(value);
                 count++;
            }
        // Далее идёт математическая обработка информации
        float b[count];
        float x[count];
        float t[count];
        float res[count];
        for (i = 0; i = count; i++) {
            b[i] = 0.0;
            x[i] = 0.0;
        }
        for (i = 0; i = rpt; i++) {
            for (j = 0; j = count; j++) {
                 float y = 0.0;
                 for (i = count; i = 0; i--)
                     x[i] = x[i-1];
                 x[1] = signal[j];
                 for (k = 0; k = count; k++)
                     y += x[k]*b[k];
                 if (y>1.0)
                     y = 1.0;
                 else if (y<-1.0)
                     y = -1.0;
                 res[j] = signal.at(j) - y;
                 if (res[j]>1.0)
                     res[j] = 1.0;
                 else if (res[j]<-1.0)
                     res[j] = -1.0;
                 std::cout << "Введи имя файла для записи" << std::endl;
                 std::cin >> outname;
                 std::ofstream outfile;
                 outfile.open(outname);
                 if (outfile.is_open())
                    outfile << res << std::endl;
                 outfile.close();
                 if (j==0)
                    t[j] = 0;
                 else 
                    t[j] = t[j-1] +h;
                 c = 2*m*res[j];
                    for (k = 0; k = count; k++)
                 b[k] += x[k]*c;
            }
        }
        }
    }
    infile.close();
    return 0;
}

Запустил компиляцию в терминале, однако вывело исключение:

Test.cpp:31:52: ошибка: нет соответствующей функции для вызова «getline(std::ifstream&, std::__cxx11::string&, const char [2])» while (std::getline(infile, buffer, ","))

Прочёл в интернетах, что у людей возникает такая проблема при считывании из потока с помощью getline без использования string. Однако я string использую, а другого решения данной проблемы не нашёл. Подскажите пожалуйста решение.

Answer 1

Возможно, что вы используете строку разделитель, а нужен символ. То бишь "," заменяется на ','.

READ ALSO
arborjs в angular, как подключить библиотеку?

arborjs в angular, как подключить библиотеку?

Я использую библиотеку arborjs для построения графов (Я не смог найти установку через npm), как я могу использовать эту библиотеку у себя в проекте?

117
Проблемма с include

Проблемма с include

Я делаю рандом 3 статей из базы данных и добавить их в шаблон и данные из этого шаблона передать в другой шаблон с помощью include (короче: есть...

87