如何调用函数并使其运行并返回字符?

时间:2019-02-28 05:26:11

标签: c++ function

在此代码中,它没有运行我的第一个函数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;
}

系统没有显示我有任何错误,所以我对为什么整个代码无法正确运行感到困惑。如果我缺少任何内容或逻辑错误,请提供帮助。

4 个答案:

答案 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 函数getPatientTypemain()之下。由于它在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

其余的取决于您。我希望这可以为您解决一些问题。