Получение Значения Из Функции Void

#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. Только для начального уровня этого достаточно