在此代码中,它没有运行我的第一个函数getPatientType。这段代码直接跳到“什么是医疗费用,然后索要服务费,无论我输入什么,都返回0。我正在寻找一些帮助来使此代码正常运行。
#include <iostream>
#include <iomanip>
using namespace std;
int numdays;
float dailyRate;
double medChrg;
double totalChrg;
char doAgain;
char patientType;
int daysHospital;
double serviceChrg;
int main()
{
我不确定这是否是调用此函数的正确方法,以及为什么它无法运行。
char getPatientType(char);
if (patientType == 'y' || patientType == 'Y')
{
cout << "How many days was the patient in the hospital? ";
cin >> daysHospital;
while (daysHospital < 0) {
cout << "Enter a valid number of days: ";
cin >> daysHospital;
}
cout << "What is the daily rate? : ";
cin >> dailyRate;
while (dailyRate < 0)
{
cout << "Enter a valid daily Rate. : ";
cin >> dailyRate;
}
}
cout << "What are the medical charges?: ";
cin >> medChrg;
while (medChrg < 0) {
cout << "Enter a valid medical charge : ";
cin >> medChrg;
}
cout << "What are the services charges?: ";
cin >> serviceChrg;
while (medChrg < 0) {
cout << "Enter a valid medical charge : ";
cin >> medChrg;
}
double calcBillFor(int, float, double, double);
double calcBillFor(double, double);
cout << "The charges for the patient will be " << totalChrg;
system("pause");
}
char getPatientType(char) {
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;
}
我还应该利用C ++的重载能力,因此这两个函数的名称相同但参数不同。
double calcBillFor(int, float, double, double) {
totalChrg = (dailyRate * daysHospital) + medChrg + serviceChrg;
return totalChrg;
}
double calcBillFor(double, double) {
totalChrg = (medChrg + serviceChrg);
return totalChrg;
}
系统没有显示我有任何错误,所以我对为什么整个代码无法正确运行感到困惑。如果我缺少任何内容或逻辑错误,请提供帮助。
答案 0 :(得分:0)
它没有给出错误,因为函数getPatientType()是在main之后定义的,可能用于其他工作((可能在getPatientType()函数之后定义的其他函数中使用...)
由于这个“ char getPatientType(char);”也没有给出错误。表示您正在声明或原型化函数。并在一段时间后对其进行定义。
为了解决您的问题
在主体外部声明getPatientType()函数,但是在调用此函数时,请不要忘记按照函数参数数据类型传递char类型的参数。
或
在主体内部定义getPatientType()函数。
答案 1 :(得分:0)
调用该函数的正确方法是调用:
char patientType = getPatientType();
中的int main()
。
您的函数签名应为char getPatientType() { ... }
。您没有为该函数提供任何参数。用户正在函数内部提供参数。您需要将此函数放在文件的顶部或在顶部声明它。
您可以通过在顶部放置char getPatientType();
来声明它。这告诉您的程序,请相信我,我将在程序结束时告诉您此功能的作用。
在函数内部,您需要定义一个char patientType;
。这个变量是放置cin内容的地方。
您应该真正考虑使用不同的名称来调用两个函数。他们计算相同的事物,但需要不同的值。您将很难记住您需要提供的内容,并且程序越庞大,它就会变得越混乱。例如calcBillOverDays。您也可以分离功能。 calcServiceCharge()和calcDailyCharge()
答案 2 :(得分:0)
此:
int main()
{
char getPatientType(char);
if (patientType == 'y' || patientType == 'Y')
不是对getPatientType
函数的调用,它是main
范围内函数的前向声明。
此外,由于getPatientType实际上没有任何输入参数,因此不需要(char)
部分
更好:
char getPatientType(); // forward declaration
int main()
{
patientType = getPatientType(); // actually call the function
if (patientType == 'y' || patientType == 'Y')
实际的getPatientType
函数定义如下:
char getPatientType() {
cout << "What is the type of Patient, type I for Impatient, and O for
Outpatient?: ";
<rest of code not shown for brevity>
}
答案 3 :(得分:0)
好的,从哪里开始。此代码有很多错误。首先,除非您没有其他编程方法,否则您永远都不想使用全局变量(不在函数或类内部的变量)。将它们从全局范围中完全删除。
// 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
,但我一无所知除此之外。”
在代码中使用声明的原因是因为 actual 函数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() { ... }
因此,您将了解函数声明在主函数的上方和上方 的方式。这样一来,当您在main内部实际调用getPatientType
时,编译器不会对您大喊大叫,因为它甚至从未听说过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
其余的取决于您。我希望这可以为您解决一些问题。