Вы делаете три основные ошибки. Первые два стилистичны и заставляют меня - и большинство других людей - не хотеть читать код и помогать. Последняя ваша логическая ошибка ... ну, во всяком случае, одна.
- Потратьте время, чтобы набрать значимые имена переменных. Или хотя бы усеченные. Как NumTabs или что-то, что соответствует вашему стилю.
- Убери свой стиль отступов. Правильный отступ позволяет легче понять ход программы.
Итак, ваша большая явная ошибка, когда вы делаете это:
count[11]++; //This is broken
В коде он определен выше как:
int count[11];
В этом массиве 11 целых чисел. Однако вы не начинаете ссылаться на них с 1. Вы начинаете ссылаться на них с 0. count [0], count [1] ... count [10] все допустимы. Вот так:
0 1 2 3 4 5 6 7 8 9 10
Как вы можете видеть, это 11 чисел, хотя их число увеличивается только до 10. Если вы хотите иметь возможность доступа к счетчику [11], вы должны объявить счет как
int count[12];
Это известно как ошибка "один за другим". Это довольно простой, но не чувствуйте себя слишком плохо, даже гуру заканчивают тем, что делают (обычно более сложные и печальные) версии одной и той же основной ошибки. Обработка строк - это тоже настоящая боль в целом.
В любом случае, если этого было недостаточно, если вы хотите представить это концептуально - это не так, как работает, но концептуально - ваш массив выделяет 11 целых чисел, а 'count' - указатель на него. Таким образом (указатель + 0) будет указывать на 1-е целое число, что то же самое, что сказать указатель [0]. (указатель + 1), что то же самое, что сказать, указатель [1] будет указывать на 2-е целое число. (указатель + 5) / указатель [5] будут указывать на 6-е целое число, (указатель + 11) / указатель [11] на 12-й - которого не существует, поскольку их всего 11.