【问题标题】:error: invalid operands to binary < (have 'float *' and 'double')错误:二进制 < 的操作数无效(有“float *”和“double”)
【发布时间】:2016-01-06 20:30:06
【问题描述】:

我是 C 语言编程的新手(以及一般情况下),我被困在我的功能的一部分上。我正在尝试进行错误检查,但我不断收到错误

error: invalid operands to binary &lt; (have 'float *' and 'double') 在第 97 行和第 100 行。这与我使用的数字类型有关吗?

下面贴的是我的完整代码

    #include <stdio.h>
#include <stdlib.h>

// Function Declarations
    void getData      (float* startAmt, float* intRate, int* numYears, int* startYear);

    void calcTaxes    (float  startAmt, float  intRate, int  numYears, int  startYear, float* endAmt, float* intEarned, float* percentGained, int* finalYear);

    void printResults (float  startAmy, float  intRate, int  numYears, int  startYear, float  endAmt, float  intEarned, float  percentGained, int  finalYear);

    int  main (void)
{
  // Local Declarations
      float startAmt;
      float intRate;
      int   numYears;
      int   startYear;
      float endAmt;
      float intEarned;
      float percentGained;
      int   finalYear;

  // Statements
      getData      (&startAmt, &intRate, &numYears, &startYear);
      calcTaxes    ( startAmt,  intRate,  numYears,  startYear,  &endAmt,  &intEarned,  &percentGained,  &finalYear);
      printResults ( startAmt,  intRate,  numYears,  startYear,   endAmt,   intEarned,   percentGained,   finalYear);

      return 0;
}

 //~~~~~~~~~~~~~~~ getData ~~~~~~~~~~~~~~~~~~~~

 /*
  * Function Name:    getData
  *
  * Input Parameters: startAmt, intRate, numYears, startYear
  *
  * Description:      This function reads compound interest data from the keyboard and stores it in the parameters using pointers
  *
  * Return Value:     None
  */

  void getData  (float* startAmt, float* intRate, int* numYears, int* startYear)

{
// Statements
    printf("\nCOP 2220 Project 2: Walter Doherty\n");

    printf("\nEnter a Starting amount (dollars and cents): \n");
    scanf ("%f", startAmt);

    printf("Enter an Interest rate (ex. 2.5 for 2.5%): \n");
    scanf ("%f", intRate);

    printf("Enter the Number of years (integer number): \n");
    scanf ("%d", numYears);

    printf("Enter the Starting year (four digits): \n");
    scanf ("%d", startYear);

// Validations
    if (startAmt < .01)
      exit("Starting amount must be at least one cent.\nExiting");

    if (intRate < .001)
      exit("Interest rate must be at least .1%.\nExiting");

    if (numYears < 1)
      exit("Number of years must be at least 1.\nExiting");

    if (startYear < 999 ^ startYear > 10000)
      exit("Year must be four digits\nExiting");

    return;

}

我还收到有关我所有ifstatements 的警告消息。它说warning: passing argument 1 of 'exit' makes integer from pointer without a cast [enabled by default] 我应该担心这个吗? Code::Blocks 不会将其记录为错误。 谢谢 8)

【问题讨论】:

    标签: c warnings operands


    【解决方案1】:

    错误:二进制

    错误消息准确地说明了问题所在。 startAmtfloat * 类型,.01double 类型。您不能将指针与数字进行比较,您需要做的是取消引用指针以获取值。在变量前加上*,表示您想要获取指向的值。

    if (*startAmt < .01)
    

    警告:传递 'exit' 的参数 1 从指针中生成整数而不进行强制转换 [默认启用]

    在这种情况下,您将一个指向字符数组的指针(例如“起始金额必须至少为一美分。\n退出”)传递给 exit,它需要一个整数。

    你可能想做这样的事情:

    if (startAmt < .01) {
       printf("Starting amount must be at least one cent.\nExiting");
       exit(10);
    }
    

    我只是以 10 为例,它将是你的程序完成时返回给操作系统的数字。

    请注意,输入错误时退出程序不是很友好。

    【讨论】:

      【解决方案2】:
      if (startAmt < .01)
      

      是错误的,因为startAmt 是指针,而不是数字。你需要使用:

      if (*startAmt < .01)
      

      使用

      exit("Starting amount must be at least one cent.\nExiting");
      

      以及对exit 的类似调用是错误的,因为输入参数必须是int 类型。上面的调用相当于:

      char const* message = "Starting amount must be at least one cent.\nExiting";
      exit(message);
      

      即你用char const*而不是int调用exit

      用途:

      char const* message = "Starting amount must be at least one cent.\nExiting";
      fprintf(stderr, "%s\n", message);
      exit(1);
      

      【讨论】:

        猜你喜欢
        • 2017-07-06
        • 2018-10-25
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多