2016-08-02 5 views
0

Я пытаюсь написать программу для Caesar Cipher, и сейчас я работаю над функцией, чтобы найти ключ для переключения шифрования.Проблема при чтении файлов через функцию

Теперь возникает проблема, что в то время как он читает файл, программа перерывы, и я получаю ошибку:

«Exception брошенную в 0x89012914 в ConsoleApplication11.exe: 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

[Посмотрите это] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – Rakete1111

ответ

1
if (int(character) >= 65 || int(character) <= 90) 

Поскольку символ новой строки, '\n' является ASCII 10, который меньше или равен 90, это if заявление будет вычисляться так, и ...

count[(int(character)) - 65]++; 

.. . попытаться увеличить count[10-65], или count[-55]. Вещи в значительной степени уходят с рельсов, начиная с этого момента (поскольку каждый персонаж имеет либо минимум 65, или меньше или равен 90, это всегда будет оцениваться до true).

P.S. Мне потребовалось всего несколько минут, чтобы найти эту ошибку, используя отладчик, перейдя через код, по одной строке за раз (я не мог сразу увидеть это сам) и изучил все переменные. Вы должны потратить некоторое время на изучение того, как работать с вашим отладчиком. Легче найти собственные ошибки, не требуя помощи незнакомцам на межтрубках.

+0

Хорошо, это имеет большой смысл , теперь изменил бы его с OR на И исправить проблему? – WittyUsernameHere

+0

Ну, вы пробовали, а если нет, почему бы и нет? Вам не нужно чье-либо разрешение изменять свой собственный код и видеть, работает ли он правильно. –