Почему с 30-й строкой кода работает некорректно? Например, если в файле присутствуют все 26 букв в верхнем регистре и 26 букв в нижнем регистре, считает только 26 (должен выдавать 52). А по 31-й строке все ок?