Первая проблема заключается в том, что вам нужно понять, что произошло в этой строке:
int count; // tracks the number of iterations in do loop
Вы можете просто вывести значение этой переменной:
cout << "count: " << count << endl;
И после этого вы должны прочитать немного об определении и объявлении переменных в C ++ (это не та же самая «операция»).
Если вам нужно простое решение, я могу сказать, что ваша переменная count
будет иметь некоторое «мусорное» значение.
Самый простой способ решить это - инициализировать его начальным значением. После анализа контекста я могу предположить, что int count = 0;
будет правильным начальным значением.
Полагаю, могут быть и другие проблемы, но эта напрямую связана с вашим вопросом.
Желаю вам удачи с C ++! Я также предлагаю вам изучить основы C ++, начав с понимания того, что такое определение и объявление переменных.
[UPDATE]
Я хочу добавить немного после того, как вы опубликовали свое обновление:
int i; // will be used in for loop
Пожалуйста, НЕ . Если вы хотите использовать его внутри цикла for, инициализируйте его там.
int workers = 0;
Если эта переменная означает «количество рабочих», вы должны назвать ее в соответствии с ее значением, например,
int numberOfWorkers = 0;
Ваша проблема исходит из этого li (n) e (s):
// typedef for string data types
typedef char INFO;
К сожалению, вы лжете себе в этом комментарии.
Это не тип string
. Ваш typedef
является псевдонимом char
, поэтому он хранит только один символ, а не string
.
должно быть
// typedef for string data types
typedef char* INFO;
Но, по моему скромному мнению, это избыточно, поскольку имя типа INFO
ничего не говорит.
Также вы должны помнить, что если вы хотите это исправить, вы также должны установить некоторый фиксированный размер для этих членов c-строки (f_name
, m_name
, l_name
), потому что c-строки должны иметь постоянный размер.
Существует еще одно решение - если вы хотите кодировать на C ++, предпочтите std::string
над c-строками. Вкратце, std::string
работает как массив / контейнер динамического размера для элементов типа char
.
Также вы можете просто заменить «динамический» массив в стиле c:
struct employee *emp = new employee[workers];
например std :: vector:
std::vector<employee> emp;
emp.reserve(workers);
(также нет необходимости использовать ключевое слово struct в этой строке).
Другая ошибка возникает во всех проверках ввода, например ::1010*
while(emp[i].hrs_worked < 0 || emp[i].hrs_worked > 60)
{
cout << "Must be between 0 and 60: " << endl;
cin >> emp[i].hrs_worked;
}
Это вызывает бесконечный цикл (я проверял это).
Зачем? Поскольку вы не очистили входной буфер, пример здесь: Как очистить буфер cin?
Я думаю, вы также можете рассмотреть возможность изменения этой структуры в класс и рассмотреть возможность перегрузки потоковых операторов ввода-вывода (operator << и operator >>) для вашего класса, что упростит операции ввода-вывода над employee
объектами.
И последнее замечание - пожалуйста, опубликуйте свое обновление, отредактировав предыдущий вопрос, а не помещая его в качестве ответа.
И еще раз - желаю вам удачи в изучении C ++!