【发布时间】: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