Проблема при чтении файлов через функцию

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

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

«Исключение, выданное в 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

Решение

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

Так как символ новой строки, '\n' является ASCII 10, что меньше или равно 90, это if утверждение оценит как истинное, и …

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

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

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

1

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

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

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