【问题标题】:C Function for name and 2 doubles, looped 5 times and passed by reference名称和 2 个双精度的 C 函数,循环 5 次并通过引用传递
【发布时间】:2017-12-28 09:37:51
【问题描述】:

我束手无策,也就是说,我对自己的困惑感到困惑。我的 CS36 课的作业。

我们应该在 C 中创建一个简单的工资单程序,其中我们使用一种方法输入 5 个不同的员工姓名、工作时间和小时费率,所有这些都在一个方法中。在该方法中,我们应该使用参数传递和引用传递。然后用另一种方法计算总工资、基本工资和加班工资,通过参考。然后使用另一种计算税款的方法,将工资总额作为输入,退回所欠税款。然后我们打印所有 5 个的详细信息。

即使在第一部分我也遇到了问题。当我在 main 中输入姓名和时间时,我相信没有太大问题。但是,当我将这些输入放入我在 main 中调用的它们自己的函数中时,exe 在我输入名称后就会挂起。

我已经花了将近 3 个小时来阅读函数、参数和通过引用传递,但我仍然很困惑。很可能有一些我没有得到的东西。过了那座桥,我会解决其他功能的障碍。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define size 5

void inputNameRateHours(char name, double rate, double hours);
double computeGross(double hoursworked, double hourlyrate);
//double computeOvertime(double hoursworked, double overtimerate)
//double computeTax(double gross);
//double computeNet(double gross, double tax);
//double totalpaidtoallemployees(double gross[size]);
//void printmethod(double *totalpaidtoallemployees);

int main()
{
    char name=0;
    double hours = 0, rate = 0,  gross = 0, tax = .2, totalpaidtoallemployees = 0;
    inputNameRateHours(name, rate, hours);
    printf("The name %s, the rate %d, the hours%f", &name, &rate, &hours);
    gross= computeGross(hours, rate);
    printf("");
    //computeTax(gross);
    //computeNet(gross, tax);
    //totalpaidtoallemployees*(gross);


    return 0;

}
void inputNameRateHours(char *name, double *rate, double *hours) {
    int loopcount;
    for (loopcount = 0; loopcount < size; loopcount++) 
    {
        printf("Employee Name:");
        scanf("\n %s \n", &name);
        if (strcmp(name, "-1") == 0)
            break;
        printf("\n Enter hourly rate:");
        scanf("%d", &rate);
        if ((rate = -1) == 0)
            break;
        printf("\n Enter hours worked:");
        scanf("%d", &hours);
        if ((hours = -1) == 0)
            break;
    }
}
double computeGross(double hours, double rate) {
    if (hours <= 40)
        return hours*rate;
    else if (hours > 40)
        printf("This employee worked overtime.");
}

【问题讨论】:

  • inputNameRateHours() 在 main 之前给出的原型和在 main 之后实现的函数头是不同的。原型之前使用直接参数,之后使用指向参数的指针实现。发帖的时候是不是有错别字?如果没有,如果你修复它会发生什么?
  • 请说明if ((rate = -1) == 0)的用途。
  • 是的,那是我在尝试着我所知道的很少的东西让它发挥作用。一旦它们都匹配,在我输入名称后它仍然会挂起。是 scanf 中的新行 \n 转义序列让我感到困惑吗?
  • 请在编译时带有严格的警告,例如gcc -Wall 并处理所有警告。
  • =-1 表示如果输入的名称或小时数或速率为 -1,它会中断循环并输出所有数据

标签: c function methods parameter-passing pass-by-reference


【解决方案1】:

简化您的问题。

在 main 之前声明函数。然后不需要原型(不匹配)。查找“前向引用”。

额外点:解释为什么在 main 之前有一个不同的原型会导致问题。

【讨论】:

    【解决方案2】:

    inputNameRateHours(...) 在 main 之前给出的原型和在 main 之后实现的函数头是不同的。
    原型在之前使用直接参数,之后使用指向参数的指针实现。

    我建议使用严格的警告进行编译,例如gcc -Wall.

    据我所知,您将不得不修复:

    • 上面提到的原型错误
    • 缺少包含
    • 姓名空格
    • 改进scanf
    • 第二个函数中缺少返回
    • 间接/解引用不匹配的几个案例 (&amp;/*)
    • 分配内部比较
    • 浮点恒等式比较
    • printf 中的格式说明符

    你说你已经修好了,所以我就这样吧;
    这与 StackOverflow 对家庭作业/作业的建议相匹配。
    祝你好运。

    【讨论】:

    • 没错。现在我克服了障碍,我将尝试自己解决剩下的问题。再次感谢。
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2019-12-06
    • 2013-03-05
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多