У меня проблема с моим кодом.
Когда я запускаю этот код, появляется правильный ответ. Через некоторое время я вижу ошибку, показывающую, что «программа перестала работать» (0xC0000005). У вас есть идеи, почему программа не работает должным образом? Кажется, все в порядке.
#include <iostream>
#include <fstream>
using namespace std;
int k = 107;
string word;
string word_out;
fstream plik;
fstream plik_out;
int main() {
plik.open("Dane_PR2/dane_6_1.txt", ios::in);
plik_out.open("Dane_PR2/wynik_6_1.txt", ios::out);
for (int i = 0; i < 100; i++)
{
plik >> word;
for (int j = 0; j < word.length(); j++)
{
while (k>26)
{
k=k-26;
}
word_out[j] = word[j] + k;
if (word_out[j] > 90) word_out[j] = word_out[j] - 26;
cout << word_out[j];
plik_out << word_out[j];
}
cout << endl;
plik_out << endl;
}
plik.close();
plik_out.close();
return 0;
}
здесь у вас есть входные данные — текстовый файл, который читает моя программа:
http://www74.zippyshare.com/v/4i6fg2NB/file.html
Одна из основных проблем заключается в том, что вы получаете доступ к word_out
за пределами строки:
word_out[j] = word[j] + k;
word_out
в то время, когда эта строка выполняется, пуста, поэтому индекс отсутствует j
внутри строки.
Измените эту строку на:
word_out.at(j) = word[j] + k;
и теперь вы должны получить std::out_of_range
исключение вместо загадочного нарушения прав доступа.
Поэтому вам нужно исправить свою программу, чтобы вы не выходили за пределы. Один из возможных способов — определить размер word_out
Строка, прежде чем использовать его.
plik >> word;
word_out.resize(plik.size());
Других решений пока нет …