Ошибка подтверждения при записи в текстовый файл с использованием ofstream - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь записать некоторые строковые данные в файл .txt, который я прочитал от пользователя, но после этого программа завершает свою работу, а не продолжает, и когда я проверяю результаты в файле .txt, я вижу некоторую часть данные и затем какая-то тарабарщина, за которой следует ошибка подтверждения ! Вот код:

#include "std_lib_facilities.h"
#include <fstream>

using namespace std;
using std::ofstream;

void beginProcess();
string promptForInput();
void writeDataToFile(vector<string>);

string fileName = "links.txt";
ofstream ofs(fileName.c_str(),std::ofstream::out);

int main() {
 //  ofs.open(fileName.c_str(),std::ofstream::out | std::ofstream::app);
  beginProcess();
  return 0;
}

void beginProcess() {
  vector<string> links;
  string result = promptForInput();
  while(result == "Y") {
    for(int i=0;i <= 5;i++) {
      string link = "";
      cout << "Paste the link skill #" << i+1 << " below: " << '\n';
      cin >> link;
      links.push_back(link);
    }
    writeDataToFile(links);
    links.clear(); // erases all of the vector's elements, leaving it with a size of 0
    result = promptForInput();
  }
  std::cout << "Thanks for using the program!" << '\n';
}

string promptForInput() {
  string input = "";
  std::cout << "Would you like to start/continue the process(Y/N)?" << '\n';
  std::cin >> input;
  return input;
}

void writeDataToFile(vector<string> links) {
  if(!ofs) {
    error("Error writing to file!");
  } else {
    ofs << "new ArrayList<>(Arrays.AsList(" << links[0] << ',' << links[1] << ',' << links[2] << ',' << links[3] << ',' << links[4] << ',' << links[5] << ',' << links[6] << ',' << "));\n";
 }
}

Проблема, вероятно, где-то в процедуре написания ofstream, но я не могу ее понять. Есть идеи?

1 Ответ

0 голосов
/ 02 июля 2018

Похоже, вы заполняете вектор из 6 элементов с индексами 0-5, однако в вашей функции writeDataToFile имеются ссылки на разыменования [6], которые выходят за пределы вашего исходного вектора.

Еще одна вещь, которая не связана с вашей проблемой, но является хорошей практикой:

void writeDataToFile(vector<string> links) 

объявляет функцию, которая выполняет копию вашего вектора. Если вы не хотите специально копировать ваш входной вектор, вы, скорее всего, захотите передать константную ссылку, например, tso:

void writeDataToFile(const vector<string>& links)
...