Перво-наперво:
int sparky[14];
даст вам массив из 14 элементов sparky[0..13]
, , а не 15 элементов, как вам кажется.
Во-вторых, ваш внутренний цикл не совсем правильный. Ваш начинается с индекса 1 и переходит к индексу 15, тогда как, поскольку массив C начинается с нуля, вы должны циклически изменяться от 0 до 14.
Это можно исправить, изменив условие цикла на while (counter < howmany)
и переместив counter++
непосредственно перед концом внутреннего цикла.
Просто чтобы прояснить этот момент, вы делаете на самом деле начинаете цикл с 0, но, поскольку первое, что вы делаете в цикле, это counter++
перед использованием sparky[counter]
, вы обрабатываете элементы начиная с индекса 1. И, в последнем цикле цикла, где counter == howmany
(14 согласно вашим другим комментариям здесь), вы увеличиваете его до 15 и используете то, что находится за концом массива.
И, чтобы прояснить это уточнение :-), ваш цикл будет правильным, если у вас установлено значение 14 (т. Е. На один меньше, чем количество элементов массива), поскольку, как вы указали в комментарий в другом месте, вы загружаете нулевой элемент перед входом во внутренний цикл. Я думаю, что do все равно нужно установить high
всякий раз, когда вы устанавливаете holder
. Если этого не сделать, я получу два 6 и два 2 в моем списке, а не 3 или 4.
В качестве дополнительной проблемы для вашего комментария о том, что для howmany
установлено значение 14, я бы предложил, чтобы имена переменных отражали их намерения. У вас явно есть 15 элементов в массиве (индексы от 0 до 14 включительно). Не воспринимайте это как критику, я просто пытаюсь помочь.
В-третьих, (и, наконец, я думаю), вы не устанавливаете high
каждый каждый раз, когда вы устанавливаете holder
- они должны синхронизироваться для правильной работы вашего алгоритма.
Пожалуйста, дайте нам знать, это домашнее задание. Если нет, я выложу свое решение. Если это так, вы должны решить это из руководящих принципов, приведенных в этом и других ответах. Вы должны знать, что, если это домашнее задание, и вы используете решение, опубликованное на публичном форуме в Интернете (например, это), вы почти наверняка потерпите неудачу из-за плагиата. Не делайте ошибку, думая, что ваши преподаватели не проверяют такого рода вещи.
Итог, хотя я рад опубликовать свое решение, вы, вероятно, не должны использовать его в качестве классной работы. Высшие оценки, хотя, по крайней мере, дать ему выстрел в первую очередь. Большинство искателей домашних заданий, похоже, приходят сюда только с техническими характеристиками: -)
Обновление: Поскольку вы опубликовали следующее:
Извините, что упомянул, но это часть дополнительного кредитного проекта для класса.
Я думаю, это классная работа. Так что, для вас нет супа :-) Тем не менее, трех пунктов выше должно быть достаточно, чтобы вы могли это исправить. Если у вас есть конкретные вопросы по ним, не стесняйтесь спрашивать в комментарии к этому ответу.
Удачи.