Хорошо, с чего начать.В этом коде много неправильного.Во-первых, вы никогда не захотите использовать глобальные переменные (переменные, которые не находятся внутри функции или класса) , если нет другого способа запрограммировать его , что крайне редко.Полностью удалите их из глобальной области видимости.
// delete all of these...
int numdays;
float dailyRate;
double medChrg;
double totalChrg;
char doAgain;
char patientType;
int daysHospital;
double serviceChrg;
Вместо этого сделайте их параметрами ваших функций.Например, вот как вы могли бы записать их как параметры:
double calcBillFor(int daysHospital, float dailyRate, double medChrg, double serviceChrg)
{
...
}
Вы можете увидеть, как это все еще позволяет функции работать, но единственная вещь, которая имеет доступ к переменным, - это сама функция.Мы не хотим, чтобы все имели доступ к этим данным.Я позволю вам исправить другую функцию calcBillFor
с соответствующими переменными (убедитесь, что они удалены из глобальной области видимости после того, как вы задали их параметры).
Первая строка в main()
- это char getPatientType(char);
.Это не подходящий способ вызова функции.Это декларация, и она объявляется внутри main()
, что нелогично.Цель этого объявления - сказать: «Эй, где-то есть функция с именем getPatientType
, и в качестве параметра она принимает char
, и она возвращает char
, но я ничего не знаю об этом, кроме этого."
Причина, по которой в вашем коде используется объявление, заключается в том, что фактическая функция getPatientType
ниже main()
.Поскольку он ниже main()
, main()
не может знать, что он существует даже без объявления функции.Вот почему вы должны сделать что-то вроде этого:
char getPatientType(char);
/* "Hey, compiler! Somewhere there's a function called getPatientType
* that takes a char and returns a char, but that's all I know about
* it right now."
*/
int main() { ... }
Таким образом, вы видите, как объявления функций находятся вне и над главной функцией .Это делает так, что когда вы на самом деле вызываете getPatientType
внутри main, компилятор не будет кричать на вас, потому что он никогда даже не слышал 1035 * из getPatientType
.Это потому, что вы сказали ему ожидать, что getPatientType
будет позже в коде, так что он останется доволен.
Однако, если мы посмотрим на getPatientType
позже в коде, мы быстро узнаем, чтодаже не нужно передавать char
!Вместо этого это можно было бы написать так:
char getPatientType() {
char patientType;
cout << "What is the type of Patient, type I for Impatient, and O for Outpatient?: ";
cin >> patientType;
if (patientType != 'I' || patientType != 'i' || patientType != 'o' ||
patientType != 'O')
{
cout << "Enter a valid patient type: ";
cin >> patientType;
}
return patientType;
}
Поскольку мы изменили внешний вид getPatientType
, нам также необходимо изменить это объявление, которое мы сделали ранее main()
.
char getPatientType();
/* "Hey, compiler! Somewhere there's a function called getPatientType
* that takes NOTHING and returns a char, but that's all I know about
* it right now."
*/
int main() { ... }
Вот как бы вы назвали такую функцию:
char patientType = getPatientType();
// patientType now stores our input
Остальное зависит от вас.Я надеюсь, что это прояснило некоторые вещи для вас.