Следуя моим комментариям.
Это все еще не
- минимальный - Ваша проблема заключается в записи в файл.Не имеет значения, как вы генерируете данные.Вы могли бы вручную добавить код, который заполняет необходимые структуры без использования пользовательского ввода.
- complete - опубликованный код по-прежнему не компилируется.Я до сих пор не знаю, что такое
Item
, и у меня нет файла "Item.h", чтобы это выяснить. - проверяемый - отправленные вами данные не соответствуют тому, что генерировал код,Например, нет «Добро пожаловать» ...
пример.Я сомневаюсь, что вы прочитали страницу, на которую я ссылался дважды.
Соблюдение этих требований может показаться педантичным и ненужным, это не так.Чем лучше вы задаете вопрос, тем больше шансов, что кто-то захочет прочитать его и ответить на него.Посмотрите другие вопросы, которые получают много комментариев через минуту или две.Потратьте некоторое время, чтобы кто-то другой захотел инвестировать свое.Не многие люди удосужились прочитать ваши.Цель MCVE также состоит в том, чтобы помочь вам решить эти проблемы самостоятельно - путем понимания того, что не так, какой код неисправен и как объяснить проблему другим и даже себе.Код, опубликованный после редактирования, действительно отличается от кода, приведенного ранее.
В вашем случае создание MCVE с большой вероятностью решит проблему.Следующий цикл с глобальной переменной loc
ошибочен:
for (int i = 0; i < y; i++)
{
//addItem(); expands to:
//...
iArray[loc].setItemName(itemName);
//...
}
Цикл работает с тем же элементом, поскольку переменная loc
не изменяется.Это было не в первой версии вашего вопроса!Таким образом, перезаписывая элемент новыми записями, пока не останется последняя запись.Что именно то, что напечатано.Причиной появления строки «Ваше имя элемента: ---------- $ 0» является то, что, вероятно, конструктор по умолчанию Item
класса устанавливает имя в пустую строку и цену в ноль.Опять же, это всего лишь предположение, поскольку я не знаю, что такое Item
.
Мой совет - избавиться от всех глобальных переменных.Ничего хорошего из них не выйдет.Ваш код кажется грязным (по крайней мере, как здесь написано), поэтому найдите время и разделите программу на независимые строительные блоки, сделайте функцию для каждого блока.Функция тогда действует только на свои аргументы.При необходимости используйте передачу по ссылке.Если переменная (должна быть) передана во все функции, пусть будет так.Это более понятно, и, по моему мнению, больше печатания помогает начинающим изучать язык.Также сказать, что обход кода с помощью отладчика - важный навык, значит преуменьшение.Вы сразу увидите, что элементы массива перезаписываются.