C ++, помещая векторные данные в файл .csv - PullRequest
0 голосов
/ 22 марта 2019

Я работаю над чем-то простым, и я хочу, чтобы он мог взять все внутри вектора и поместить его в файл .CSV, где каждая строка будет новым вектором, а столбцы будут каждой позицией в векторе,

Это мой текущий код, однако всякий раз, когда я открываю файл CSV, он полностью пуст.

Любая помощь будет принята с благодарностью!

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

using namespace std;

int main()
{
    ofstream myfile;
    myfile.open("test.csv");

    vector<int> arrayOne = { 10, 20, 30, 40, 50 };


    for (int i = 0; i < arrayOne.size(); i++)
    {
        myfile << arrayOne.at(i) << ",";
    }

    cin.ignore();
    cin.ignore();
    return 0;
}

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Поскольку помеченный ответ является полностью правильным в функции, которую он требует от OP, но он является производным в коде. Который может привести к неразрушаемому коду или изменить предназначенное OP поведение. Пожалуйста, рассмотрите этот код:

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

// removed "using namespace std"

int main()
{
    std::ofstream myfile; // added "std::"
    myfile.open("test.csv");

    std::vector<int> arrayOne { 10, 20, 30, 40, 50 };

    for (int i = 0; i < arrayOne.size(); i++) { // added "{"
        myfile << arrayOne.at(i) << ",";
    } // added "{"

    myfile.close(); // <- note this correction!!
    std::cin.ignore(); // added this
    std::cin.ignore(); // added this
    return 0;
}
  • не используйте using namespace std. Это пространство имен включает в себя сотни тысяч функций. Вы можете столкнуться с одним из них, и отладить это будет сложно.
  • Отмеченный ответ удаляет скобки {} в for-loop. НИКОГДА не делайте этого, вы можете столкнуться с неразрешимыми проблемами, когда добавите одну строку к вашему for-loop. Эта строка не выполняется в цикле.
  • Ответ также удаляет жизненно важный код из OP дважды: std::cin.ignore();
0 голосов
/ 22 марта 2019

Закройте файл следующим образом:

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

using namespace std;

int main()
{
    ofstream myfile;
    myfile.open("test.csv");

    vector<int> arrayOne = { 10, 20, 30, 40, 50 };

    for (int i = 0; i < arrayOne.size(); i++)
        myfile << arrayOne.at(i) << ",";

    myfile.close();
    return 0;
}

Дело в том, что выходные потоки часто буферизуются.Когда вы закрываете файл, функция close() гарантирует, что любая ожидающая последовательность вывода записывается в файл.

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