-2

私は C (および一般的に) でプログラミングするのが初めてで、関数の一部に固執しています。エラーチェックをしようとしていますが、エラーが発生し続けます

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)

4

2 に答える 2

0
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);
于 2015-10-09T02:43:56.857 に答える
0

エラー: バイナリ < に対するオペランドが無効です ('float *' と 'double' があります)

エラーメッセージは、問題が何であるかを正確に示しています。startAmtはタイプfloat *.01あり、タイプdoubleです。ポインターを数値と比較することはできません。値を取得するには、ポインターを逆参照する必要があります。変数の*前に を付けて、指している値を取得したいことを示します。

if (*startAmt < .01)

警告: 'exit' の引数 1 を渡すと、キャストなしでポインタから整数が作成されます [デフォルトで有効]

この場合、文字の配列へのポインターを渡しています (例: "Starting amount must be at least 1 cent.\nExiting")。exitこれには整数が必要です。

あなたはおそらく次のようなことをしたいと思うでしょう:

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

例として 10 を使用しました。これは、プログラムが終了したときにオペレーティング システムに返される数値です。

間違った入力を受け取ったときにプログラムを終了するのはあまり友好的ではないことに注意してください。

于 2015-10-09T02:42:00.180 に答える