如何修复此代码?此外,我的问题是如何使利率为任意数字。例如:rate = n
#include<stdio.h>
int main(){
int hours, rate, pay;
hours = 40;
rate = n;
printf("Type forty: ");
scanf("%d", &hours);
printf("Your desired rate: ");
scanf("%d", &rate);
pay = 40 * rate;
pay = hours*rate+(hours-40)*rate*1.5;
printf("The result is %d");
return 0;
}
代码中的问题是,即使小时数小于40,也总是计算加班时间;这样做,你计算的加班费太多了。
因此,取而代之的是:
pay = 40 * rate;
pay = hours*rate+(hours-40)*rate*1.5;
如果第一行无论如何都没有效果,因为它被第二行重写,写(例如(
if (hours <= 40) {
pay = hours * rate;
}
else {
pay = 40*rate+(hours-40)*rate*1.5;
}
请注意,在代码中出现三次的文字40
是丑陋的,应该用符号常量的变量来代替。
此代码的一个更稳定的版本是:
#include<stdio.h>
int main(void){
unsigned int rate, hours;
const unsigned int maxHours = 40;
unsigned long pay = 0;
printf("Type forty (or more): ");
scanf("%i", &hours);
printf("Your desired rate: ");
scanf("%i", &rate);
if(hours > maxHours) {
pay = (hours*rate)+(hours-maxHours)*rate*1.5;
}
else {
pay = hours*rate;
}
printf("The result is %lu", pay);
return 0;
}
此代码解决以下问题:
- 只有当工作时间超过40时,它才会计算额外的工资。其他人在这里正确地回答了这个问题,这要归功于他
- 它处理了最后一个
printf()
中缺少参数的错误,该错误用于打印pay值 - [可选]小时数和速率在逻辑上(很可能(总是正值,因此使用
unsigned int
而不是int
- [可选]
pay
的数据类型更改为unsigned long
,以便在rate
和hours
的值高到足以溢出unsigned int
范围的情况下覆盖该场景