C++ "Program has stopped working" - ROT-107(凯撒密码)
C++ "Program has stopped working" - ROT-107 (Caesar cipher)
我的代码有问题。
当我运行这段代码时,正确答案就出现了。过了一会儿,我看到一个错误,显示 "program has stopped working" (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;
}
这里你有输入数据 - 我的程序读取的 txt 文件:
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());
我的代码有问题。
当我运行这段代码时,正确答案就出现了。过了一会儿,我看到一个错误,显示 "program has stopped working" (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;
}
这里你有输入数据 - 我的程序读取的 txt 文件:
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());