编译器显示“作为左操作数分配所需的错误左值”。它是什么意思以及如何解决它?

时间:2017-05-19 05:40:54

标签: c

我是编程新手。所以,细节表示赞赏。

#include<stdio.h>
#include<math.h>

    int main()
    {
        float x, f(x);
        printf("Enter x=");
        scanf("%f", &x);
        f(x)= 3*pow(x, 5)- 5*sqrt(x)-6*sin(x); /*in this line compiler shows error*/
        printf("f(x)= %f", f(x));
        return 0;
    }

3 个答案:

答案 0 :(得分:0)

在您的代码中,f(x)是有效的标识符,但不是变量。它是一个非常糟糕的(现在无效,根据最新的C标准)函数原型。您不能指定,它不是可修改的左值。

这就是

的原因
  f(x)= 3*pow(x, 5)- 5*sqrt(x)-6*sin(x);

编译器尖叫。

为什么您的代码没有为无效格式引发错误,它是编译器中的遗留支持。在你的情况下

  float x, f(x);

处理

相同
  float x, float f ( int x ) ;  //missing data type is treated as 'int', 
                                // DON'T rely on this "feature"

答案 1 :(得分:0)

以下可行。

#include <stdio.h>
#include <math.h>

int main()
{
    float x, f;

    printf("Enter x=");
    scanf("%f", &x);
    f = 3 * pow(x, 5) - 5 * sqrt(x) - 6 * sin(x);
    printf("f(x)= %f", f);

    return 0;
}

答案 2 :(得分:0)

请原谅我假设你是一名C初学者,正在寻找用C编写函数的方法。那里有很多C教程,我建议找一个进一步学习。
以下是使用实际C函数进行操作的示例。

#include<stdio.h>
#include<math.h>

/* first define the function */
float f(float x) /* function head */
{ /* start of function body */
    return  3*pow(x, 5) - 5*sqrt(x)-6*sin(x);
} /* end of function body and definition */

int main(void)
{
    float x; /* definition of function has already happened, so no f(x) here */
    printf("Enter x=");
    scanf("%f", &x);

    printf("f(x)= %f", f(x) /* call the function */);

    /* Note that some coding styles do not like calling a function 
       from within a more complex statement. Using a variable to
       take the result of the function is preferred.  
       I chose this way to stay more similar to your own code.
     */
    return 0;
}