#c #linux #unix
Вопрос:
Недавно один из моих профессоров дал мне задание, в котором я должен написать фрагмент кода, в котором он запрашивает зарплату, годы службы, а затем на основе этих двух фрагментов информации рассчитывает бонус. Я работал с функциями, объявленными как двойные, но это мой первый раз, когда я работаю с функциями void. У меня возникли проблемы с пониманием того, как я могу заставить свою первую функцию сохранять запрошенные значения для лет службы и зарплаты, а затем использовать их в следующей функции для расчета бонуса. Это то, что у меня сейчас есть:
#include lt;cstdiogt; void GetInput() { double salary; int years_service; printf("Enter your salary: "); scanf("%lf", amp;salary); printf("How many years have your served for us? "); scanf("%d", amp;years_service); } void CalcRaise() { //I initialized salary and years_service because they would not compile //otherwise. As expected, it does run but since they are set to 0, the //bonus will be zero. double salary = 0; int years_service = 0; double bonusA; double bonusB; double bonusC; bonusA = salary * .02; bonusB = salary * .05; bonusC = salary * .10; if ( years_service lt; 2) { printf("Here is your bonus: %lf", bonusA); } else if ( years_service gt; 5 amp;amp; years_service lt; 10) { printf("Here is your bonus: %lf", bonusB); } else { printf("Here is your bonus: %lf", bonusC); } return; } int main() { GetInput(); CalcRaise(); return 0; }
Как я уже упоминал, мне просто трудно понять, как сохранить значения из моей первой функции и использовать их для расчета бонуса. Любая помощь будет признательна. -Спасибо
Комментарии:
1. Передайте указатели на первую функцию (
GetInput()
). Передайте значения второй функции (CalcRaise()
).2. Я использовалamp;, чтобы попытаться ссылаться на переменные, но я был немного смущен тем, как передать их в функцию, например, где поместить синтаксис
3. Странная бонусная схема: те, у кого срок службы 0 или 1 год, получают 2%; те, у кого срок службы 6-9 лет, получают 5%, те, у кого срок службы 2-5 лет, и те, у кого срок службы 10 или более лет, получают 10%. К счастью, это всего лишь упражнение в классе.
Ответ №1:
Сделайте все переменные глобальными и инициализируйте эти переменные на самом начальном этапе.
#include lt;stdio.hgt; #include lt;stdlib.hgt; double salary = 0; int years_service = 0; double bonusA; double bonusB; double bonusC; void GetInput() { printf("Enter your salary: "); scanf("%lf", amp;salary); printf("How many years have your served for us? "); scanf("%d", amp;years_service); } void CalcRaise() { bonusA = salary * .02; bonusB = salary * .05; bonusC = salary * .10; if (years_service lt; 2) { printf("Here is your bonus: %lf", bonusA); } else if (years_service gt; 5 amp;amp; years_service lt; 10) { printf("Here is your bonus: %lf", bonusB); } else { printf("Here is your bonus: %lf", bonusC); } } int main() { GetInput(); CalcRaise(); return 0; }
Комментарии:
1. Мне всегда кажется, что я упускаю из виду самые простые решения. Спасибо
2. Глобальные переменные, как правило, не являются хорошей идеей. Здесь их легко избежать, и здесь их следует избегать.
3. Только для начального уровня этого достаточно