无法理解此简单C程序中的此错误
我不明白为什么当我执行这个程序时,它总是告诉我代码工资=40*费率+小时数-40*加班费率;if语句中的表达式结果未使用。 请告诉我有什么问题。非常感谢你无法理解此简单C程序中的此错误,c,C,我不明白为什么当我执行这个程序时,它总是告诉我代码工资=40*费率+小时数-40*加班费率;if语句中的表达式结果未使用。 请告诉我有什么问题。非常感谢你 #include <stdio.h> #define RATE 15.0; #define OVERTIME_RATE 25.0; int main(void) { int emp_no; double hours, salary; printf("Employee Number: "); scanf("%d"
#include <stdio.h>
#define RATE 15.0;
#define OVERTIME_RATE 25.0;
int main(void)
{
int emp_no;
double hours, salary;
printf("Employee Number: ");
scanf("%d", &emp_no);
printf("Enter the hours worked this week: ");
scanf("%lf", &hours);
if (hours <= 40.0){
salary = hours*RATE;
}else {salary = 40 * RATE + (hours-40) * OVERTIME_RATE;}
printf("Pay of Employee %d is S$%8.2f.\n", emp_no, salary);
return 0;
}
所以,我试着在一个在线编译器上运行你的程序,就像你写的那样,它运行得很好。这是一个截图 分享你的想法,你的想法是什么 编辑:在您的代码中发现问题,定义永不以分号结束,因此更新后的代码运行良好 包括 定义费率15.0 定义加班费率25.0 int mainvoid{ 国际环境管理局; 双倍工作时间,工资; 打印员工编号:; 扫描%d,&emp\u编号; 本周的工作时间:; 扫描%lf,&h; 如果小时这是错误的
#define RATE 15.0;
预处理器通过文本替换工作,因此每次您提到RATE时,它都被15.0;替换,但您希望它被15.0替换
因此,你应该写:
#define RATE 15.0
当然,加班费也是如此
使用宏定义替换的结果:
{salary = 40 * 15.0; + (hours-40) * 25.0;;}
这和
{
salary = 40 * 15.0;
+ (hours-40) * 25.0;; // this line contains just an expression
// that is evaluated but not used, hence the warning
}
预处理器宏实际上不是核心C语言的一部分,因此它们具有不同的语法规则。例如,它们以行尾结束,而不是分号结束 此外,宏基本上是复制粘贴到使用它们的代码中,这将导致您的语句
salary = 40 * RATE + (hours-40) * OVERTIME_RATE;
真的是
salary = 40 * 15.0; + (hours-40) * 25.0;;
现在很容易看出问题所在
要解决您的问题,只需从宏定义中删除分号。从定义行末尾删除“;”,警告将消失。当您定义RATE 15.0时,请注意试用“;”,否则{salary=40*费率是else条款中的第1行计算的全部,离开小时数-40*加班费率;下一行是无效声明。我不是你的downvote@DavidC.Rankin哦,谢谢你指出这一部分,我现在将编辑答案。是的。不使用合法表达式+hours-40*25.0的结果。