通过函数读取文件时的问题

时间:2016-08-02 02:25:47

标签: c++ function runtime-error caesar-cipher

我正在尝试为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;
}

1 个答案:

答案 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上询问陌生人,寻求帮助。