Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Из-за чего возникает необработанное исключение и как его исправить? Программа в C++

Код:
//Вывести в файл все k-элементные подмножества мн-ва {1,...,N}
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

int x[100];
void write(vector<int>& vec);
void mod(int n, int k, int i, vector<int>& vec);

int main()
{
vector<int> v;
int i = 0, n, k;
cin >> n >> k;
mod(n, k, i, v);
write(v);
return 0;
}

void write(vector<int>& vec) { //если запускать отдельно, то работает
ofstream out;
for (int i = 0; i < vec.size(); ++i) {
string pres = "";
while (vec[i] > 0) {
pres = to_string(vec[i] % 2) + pres;
vec[i] /= 2;
}
//cout << stoi(pres) << " ";
out.open("output.txt");
out << stoi(pres) << " ";
}

}

void mod(int n, int k, int i, vector<int>& vec) { // работает с целыми числами
if (i == k) {
for (int j = 0; j < k; j++) {
vec.push_back(x[i]);
}
cout << endl;
}
else {
for (x[i] = (i > 0 ? x[i - 1] + 1 : 1); x[i] <= n; x[i]++) {
mod(n, k, i + 1, vec);
}
}
}

По дате
По рейтингу
Аватар пользователя
Новичок

Не знаю что у вас там с логикой, но вектор приходит с нулевыми элементами в функцию write. А следовательно не формируется строка для транскрипции в string.
Функция mod первый цикл там точно должно быть vec.push_back(x[i]) а не (x[j])? Как то не логично.
Если поменять на x[i] на x[j] то выдает какую-то картинку из последовательностей.

Аватар пользователя
Высший разум

invalid_argument это, например, ​когда строка вместо числа

Аватар пользователя
Гений

Указывайте на каких данных вылетает ошибка, чтобы не гадать. Без этого можно пованговать, что исключение летит в этой строке:
out << stoi(pres) << " ";
Соответственно вылетит оно, когда в pres записана невалидная строка, не переводящаяся в число.