Ошибка: недопустимые операнды для двоичного кода <(имеют "float *" и "double")

Я новичок в программировании на С (и вообще), и я застрял на части для моей функции. Я пытаюсь выполнить проверку ошибок и получаю сообщение об ошибке

error: invalid operands to binary < (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;

}

Я также получаю предупреждающие сообщения относительно всех моих ifзаявления. Это говорит warning: passing argument 1 of 'exit' makes integer from pointer without a cast [enabled by default]Должен ли я беспокоиться об этом? Code::Blocks не записывает это как ошибку. Спасибо 8)

2 ответа

ошибка: недопустимые операнды для двоичного кода <(имеют "float *" и "double")

Сообщение об ошибке говорит точно, в чем проблема. startAmt имеет тип float * а также .01 имеет тип double, Вы не можете сравнить указатель с числом, вам нужно разыменовать указатель, чтобы получить значение. Положить * перед переменной, чтобы указать, что вы хотите получить значение, на которое указывает.

if (*startAmt < .01)

предупреждение: передача аргумента 1 из 'exit' делает целое число из указателя без приведения [включено по умолчанию]

В этом случае вы передаете указатель на массив символов (например, "Начальная сумма должна составлять не менее одного цента. \ N Выход") для exit который ожидает целое число.

Вы, вероятно, хотите сделать что-то вроде:

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

Я просто использовал 10 в качестве примера, это будет число, возвращаемое операционной системе после завершения вашей программы.

Обратите внимание, что выход из программы при неправильном вводе не очень удобен.

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);

то есть ты звонишь exit с char const* вместо int,

Использование:

char const* message = "Starting amount must be at least one cent.\nExiting";
fprintf(stderr, "%s\n", message);
exit(1);
Другие вопросы по тегам