0

所以我正在尝试编写一个函数,它接收一个浮点值,返回一个浮点值,并用 printf 显示在 main 中。我不断收到相同的错误: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

您需要GetPricemain.

于 2012-09-09T06:07:24.137 回答
3

C 期望在您使用它们之前看到它的函数(前向声明)。在声明它之前你已经使用GetPricemain(函数定义在 after main)。

当你的GetPrice编译看到int GetPrice(). 稍后,当它看到函数声明时,它发现真正的函数签名与隐式声明不同,并抛出错误。

因此,解决方案是定义GetPricebeforemain或使用before形式的前向声明。前向声明(就像您在各种头文件中实际发现的一样)告诉编译器该函数存在,但将其定义留给以后(甚至是另一个文件)。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 回答