c

时间:2016-02-16 15:05:18

标签: c dev-c++

我在很长一段时间后在c工作。我必须实现三个功能,包括

  1. 得到一个数字并显示一半
  2. 2.获取数字的平方

    3.获取两个数字并显示它们的总和和消除。

    我正在使用devC ++,当我编译代码时,我得到了conflict type if squareInput标题中提到的错误。这里有什么问题:

    #include<stdio.h>
    #include<conio.h>
    int main(){
    
        float x;
        printf("enter a number\n");
        scanf("%f",&x);
    
        //TASK 1 : display half of the number 
        pirntf("half of x is = %.3f",x);
    
        //TASK 2 : square of number 
    
        squareInput(x); //call square function from here
    
        // TASK 3 : get two numbers and display both summation and sabtraction
    
        float num1,num2;   // declare two floating number( floating numbers can hold decimal point numbers
        printf("enter num1 \n");
        scanf("num1 is =%f",&num1);
        printf("enter num2 \n");
        scanf("num2 is =%f",num2);
        calculate(num1,num2);// call calculate function
    
        getch();
    }
    
    float squareInput(float input){
    
        float square=input*input;
        printf("\n square of the number is %.3f \n",square);
        return 0;
    }
    
    float calculate(float num1,float num2){
    
        //summation
        float summation= num1+num2; // declare antoher variable called summation to hold the sum 
        //sabtraction
        float sabtraction=num1-num2;
    
        printf("summation is %.2f \n",summation);
        printf("sabtraction is %.2f \n",sabtraction);
    
        return 0;
    }
    

3 个答案:

答案 0 :(得分:6)

如果没有原型,事情就会出错。添加

float squareInput(float input);
float calculate(float num1,float num2);

int main()前面。

如果在调用函数之前没有声明函数,编译器会将其假定为int返回函数。但是,squareInput()返回float,因此编译器(或链接器)可能会向您抱怨。

另请注意,定义是声明(但反之亦然,显然),因此将squareInput()calculate()的定义移到它们被调用的位置之前也是如此。

答案 1 :(得分:5)

当您致电squareInputcalculate时,尚未定义它们。所以C假定隐含声明int squareInput()int calculate()。这些隐式声明与这些函数的定义冲突。

您可以通过在main之前为每个函数添加声明来解决此问题:

float squareInput(float input);
float calculate(float num1,float num2);

或者只需在main之前完整地移动这些功能。

答案 2 :(得分:1)

确保在使用函数时添加原型。这样您就不必过多担心调用它们的顺序了。

如果可以,也尝试将问题分成更小的位。像TAKS1这样的评论向您显示您实际上想要一个具有该名称的函数。

#include <stdio.h>

//prototypes
void AskUserForOneNumer(float * number, const char * question );
void TASK_1(float x);
void TASK_2(float x);
void TASK_3(float a, float b);

int main()
{
    float x, a, b;
    AskUserForOneNumer(&x, "enter x");
    AskUserForOneNumer(&a, "enter a");
    AskUserForOneNumer(&b, "enter b");
    TASK_1(x);
    TASK_2(x);
    TASK_3(a, b);
}

void TASK_1(float x)
{
    printf("x = %g\n", x);
    printf("0.5 * x = %g\n", 0.5 * x);
}

void TASK_2(float x)
{
    printf("x = %g\n", x);
    printf("x * x = %g\n", x * x);
}

void TASK_3(float a, float b)
{
    printf("a = %g\n", a);
    printf("b = %g\n", b);
    printf("a + b = %g\n", a + b);
    printf("a - b = %g\n", a - b);
}

void AskUserForOneNumer(float * number, const char * question)
{
    float x;
    printf("%s\n", question);
    scanf("%f", &x);
    printf("your input was %g\n", x);
    *number = x;
}