Ошибка: недопустимые операнды для двоичного кода <(имеют "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);