Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法理解此简单C程序中的此错误_C - Fatal编程技术网

无法理解此简单C程序中的此错误

无法理解此简单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"

我不明白为什么当我执行这个程序时,它总是告诉我代码工资=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", &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的结果。