2015-10-09 29 views
-2

我是全新的,以C編程(和一般)和我卡在我的一部分功能。我試圖做錯誤檢查,我不斷收到錯誤錯誤:無效的操作數爲二進制<(有「浮*」和「雙」)

error: invalid operands to binary < (have 'float *' and 'double') in line 97 and 100. Does this have to do with the kind of number I am using?

粘貼下面是我的全部代碼

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

回答

0

error: invalid operands to binary < (have 'float *' and 'double')

錯誤消息說明問題是什麼。 startAmtfloat *類型的,並且是.01double類型。您無法將指針與數字進行比較,您需要做的是取消引用指針,以獲取值。在變量之前加上一個*,以表示您想要獲取指向的值。

if (*startAmt < .01) 

warning: passing argument 1 of 'exit' makes integer from pointer without a cast [enabled by default]

在這種情況下,要傳遞一個指向字符數組(例如,「起始量必須至少一美分。\ nExiting」)來exit其預期的整數。

你可能想這樣做:

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

我只是用10作爲一個例子,這將是當你的程序完成數返回給操作系統。

請注意,當您輸入錯誤時退出程序不是很友好。

0
if (startAmt < .01) 

是錯誤的,因爲startAmt是一個指針,而不是數字。您需要使用:

if (*startAmt < .01) 

使用

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

,並因爲輸入參數必須是int類型來exit類似的調用是錯誤的。以上調用等效於:

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

即你正在呼籲exitchar const*,而不是一個int

用途:

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