【问题标题】:How come #define directive does not work when using an array使用数组时为什么#define指令不起作用
【发布时间】:2014-07-25 03:16:15
【问题描述】:

我的代码是:

#include <stdio.h>
#include <ctype.h>
#define maxcommission 5000
#define commission_rate .1

main()
{
    char   employee[100][65], response[10];
    double sales[100], commission[100];
    int    i;
    for(i=0;;)
    {
        printf("Do you want to add another employee? ");
        fgets(response, 10, stdin);
        response[(strlen(response)-1)]='\0';
        if (strcmp(response[i], "no") == 0 || strcmp(response[i], "n") ==0 )
            break;

        printf("Who is the first employee? ");
        fgets(employee[i], 65, stdin);
        employee[i][(strlen(employee[i])-1)]='\0';
        printf("How much did you sell?\n");
        scanf("%lf", &sales[i]);
        fflush(stdin);
        commission[i] = (sales[i] * commission_rate) > maxcommission? 5000 : sales * commission_rate; // this line gives me an error
    }
}

我刚刚了解#define 预处理器指令,我想在程序中对其进行测试。我创建了一个定义一些东西的程序。它只适用于 1 个员工条目,但是当我尝试扩展它以创建一个员工数组时,我得到了编译器错误。

特别是invalid operands to binary * (have 'double *' and 'double')。当单个条目可以正常工作时,为什么这会给我一个错误?我将如何解决这个问题?

这是有问题的行:

commission[i] = (sales[i] * commission_rate) > maxcommission? 5000 : sales * commission_rate; // this line gives me an error

【问题讨论】:

  • 您需要提供出错的代码sn-p,否则很难理解您要说的内容。
  • sales * commission_rate 正在尝试将指针与双精度值相乘。
  • 谢谢我把它加到底部了。
  • 啊,那么在sales前面加(double)是否正确?
  • @Khrono 没有。这会将commission_rate 乘以垃圾。相反,您需要修复逻辑错误。我猜你的意思是 sales[i] 而不是 sales 那里。

标签: c c-preprocessor


【解决方案1】:

该行以sales * commission_rate 结尾。我想你的意思是写sales[i] * commission_rate

【讨论】:

    【解决方案2】:
    commission[i] = (sales[i] * commission_rate) > maxcommission? 5000 : sales * commission_rate; // this line gives me an error`
    

    应该是

    commission[i] = (sales[i] * commission_rate) > maxcommission? 5000 : sales[i] * commission_rate; // this line gives me an error`
    

    【讨论】:

      【解决方案3】:

      指令适用于数组。

      : sales * commission_rate;
      

      您正试图将一个指针(不取消引用它)乘以一个常量。这就是错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        相关资源
        最近更新 更多