名称和 2 个 double 的 C 函数,循环 5 次并通过引用传递

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

我无计可施,也就是说我对我所困惑的事情感到困惑。我的 CS36 类(class)作业。

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

即使在第一部分我也有问题。当我在 main 中输入 name&hours 时,我相信问题不大。但是,当我将这些输入放在我在 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 之前给出的原型(prototype)和在 main 之后实现的函数头是不同的。
原型(prototype)之前使用直接参数,之后使用指向参数的指针实现。

我建议编译时带有严格的警告,例如gcc -Wall

据我所知,您必须修复:

  • 如上所述的原型(prototype)错误
  • 缺少包含
  • 姓名空间
  • 改进scanf
  • 第二个函数中缺少 return
  • 几个不匹配的间接/解引用案例(&/*)
  • 内部比较作业
  • 浮点身份比较
  • printf 中的格式说明符

您表示您已经满意地修复了,所以我将就此打住;
这符合 StackOverflow 对家庭作业/作业的建议。
祝你好运。

关于名称和 2 个 double 的 C 函数,循环 5 次并通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45252836/

相关文章:

c - 如何在 C 中打印 double 数组?

javascript - 匿名回调函数说明

Java读入时带空格

java - 创建计算器但无法退出

c - 如何使用指针打印元素

使用指针将 C 语言转换为 MIPS 程序集

c - 在停在 getchar() 之前重复进入 while 循环

arrays - 如何将数组传递给VBA中的函数?

java - 功能接口(interface)作为功能引用

java - 递归查找链表的最大值