C ++ «Программа перестала работать» — ROT-107 (Цезарь)

У меня проблема с моим кодом.
Когда я запускаю этот код, появляется правильный ответ. Через некоторое время я вижу ошибку, показывающую, что «программа перестала работать» (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

-3

Решение

Одна из основных проблем заключается в том, что вы получаете доступ к 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());
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector