0

そこで、float 値を受け取り、float 値を返し、printf でメインに表示する関数を作成しようとしています。同じエラーが発生し続けます: markup2.c:58: エラー: 'GetPrice' のタイプが競合しています markup2.c:46: エラー: 以前の暗黙の宣言 'GetPrice' はここにありました

どこで間違いを犯していますか?GetPrice に触れるすべてのものを型キャストしようとしましたが、まだうまくいきません。誰かが私が間違っていることを説明してもらえますか?

    #include<stdio.h>

// define the constant MARKUP as float value 0.1
#define MARKUP 0.1

int main()
{
    // declare variables
    char proceed;
    float value;
    float markupValue;

    // display welcome message to user and inform them of markup rate
    printf("\nThank you for using Chad Hammond's markup calculator.\n");
    printf("The current markup rate is %.1f%c.\n",MARKUP*100,'%');

    // ask user if they want to perform a markup
    printf("Would you like to markup an item? y/n:\n");
    scanf("%c", &proceed);

    // if yes, proceed to next step
    if(proceed == 'y')
    {
        // prompt user for the price of item to be marked up
        printf("Please enter a wholesale value to markup: ");
        scanf("%f", &value);

        // display input back to user
        printf("The wholesale value you entered was: %c%.2f\n",'$', value);
        markupValue = (value*MARKUP);

        // display amount of increase
        printf("The dollar amount of this increase will be: %c%.2f\n",'$', markupValue);

        // display total price after increse
        printf("The price for this item after markup is: %c%.2f\n",'$', (float)GetPrice(value));
    }else
        // if user did not want to markup an item, belittle them with sarcasm
        printf("Well, if you didn't want to markup an item you should have just used a Ti-83 and left me alone!\n\n");
    // display exit message
    printf("Thank you for using HammondInstruments Markup Calculator, goodbye.\n");

    // return that program has completed
    return 0;
}

float GetPrice(float value)
{
    float output;
    value += value*MARKUP;
    output = value;
    return (float)output;
}
4

4 に答える 4

3

GetPriceの前に宣言または定義する必要がありますmain

于 2012-09-09T06:07:24.137 に答える
3

C は、関数を使用する前にその関数を確認することを期待しています (前方宣言)。GetPrice宣言する前にinを使用しましmainた (関数定義は aftermainです)。

コンパイラが の使用を確認するとGetPrice、それはまだ確認されていない関数であると想定し、 のような暗黙の宣言を生成しint GetPrice()ます。後で関数宣言を確認すると、実際の関数シグネチャが暗黙の宣言と異なることがわかり、エラーがスローされます。

したがって、解決策はGetPricebeforeを定義するか、 before形式の前方宣言mainを使用することです。forward 宣言 (さまざまなヘッダー ファイルに実際にあるものと同様に) 関数が存在することをコンパイラに伝えますが、その定義は後で (または別のファイルに) 残します。float GetPrice(float);main#include

于 2012-09-09T06:09:06.307 に答える
1

最初に宣言するべきではありませんGetPriceか?そしてmain

于 2012-09-09T06:07:06.620 に答える
1

あなたの主な問題は、前に を宣言しなかったためmain、コンパイラがGetPriceあなたのものと一致しないデフォルトの宣言を提供しているため、競合が発生することです。の前にプロトタイプを追加するmainか、関数全体をそこに移動する必要があります。

float GetPrice(float);
//main
float GetPrice(float value){...}

また

float GetPrice(float value){...}
//main
于 2012-09-09T06:07:55.790 に答える