我正在尝试为Caesar Cipher编写一个程序,现在我正在使用该函数来找到移动密码的密钥。
现在问题出现了,当它读取文件时,程序中断,我收到错误:
“在ConsoleApplication11.exe中的0x89012914处抛出异常:0xC0000005:访问冲突执行位置0x89012914。 如果存在此异常的处理程序,则可以安全地继续该程序。“
这是我到目前为止的代码,有什么明显的东西我可以忽略吗?
int findKey(string& file);
int main()
{
string inputFileName;
cout << "Input file name: ";
getline(cin, inputFileName);
findKey(inputFileName);
}
int findKey(string& file)
{
string reply;
ifstream inFile;
char character;
int count[26] = { 0 };
int nGreatest = 0;
inFile.open(file.c_str());
if (!inFile.is_open())
{
cout << "Unable to open input file." << endl;
cout << "Press enter to continue...";
getline(cin, reply);
exit(1);
}
while (inFile.peek() != EOF)
{
inFile.get(character);
cout << character;
if (int(character) >= 65 || int(character) <= 90)
{
count[(int(character)) - 65]++;
}
else if (int(character) >= 97 || int(character) <= 122)
{
count[(int(character)) - 97]++;
}
}
for (int i = 0; i < 26; i++)
{
if (count[i] > nGreatest)
nGreatest = count[i];
}
cout << char(nGreatest) << endl;
return 0;
}
答案 0 :(得分:1)
if (int(character) >= 65 || int(character) <= 90)
由于换行符'\n'
为ASCII
10,小于或等于90,因此if
语句将评估为true,并且......
count[(int(character)) - 65]++;
...尝试增加count[10-65]
或count[-55]
。从这一点来看,事情几乎完全没有了(因为每个字符至少为65,或者小于或等于90,这将总是评估为true
)。
P.S。我花了几分钟来找到这个bug,使用调试器,逐步执行代码,一次一行(我自己无法立即看到它)并检查所有变量。您应该花些时间学习如何使用调试器。这样可以更容易找到自己的错误,而无需在intertubes上询问陌生人,寻求帮助。