C 程序,左值需要作为赋值的左操作数

  • 本文关键字:赋值 操作数 程序 c
  • 更新时间 :
  • 英文 :


我编写了一个程序,但是在创建条件后分配值时,它显示了一个名为"lvaluered作为赋值的左操作数"的错误。如何解决此错误?

我的代码如下:

#include<stdio.h>
int main()
{
int calls;
float bills;
printf("Enter the number of calls:n");
scanf("%d",&calls);
calls<=100? bills=250:bills=250+(1.25*(calls-100));
printf("Bills: %f Rs.",bills);
return 0;
}

你可以更清楚地写成

bills = calls<=100 ? 250 : 250 + (1.25*(calls-100));

if(calls <= 100)
bills = 250;
else bills = 250 + (1.25*(calls-100));

甚至

bills = 250;
if(calls > 100)
bills += 1.25*(calls-100);

(我,我会选择最后一个。

您需要在第三个操作数周围添加()

calls<=100? bills=250:(bills=250+(1.25*(calls-100)));

否则,它被解析为:

(calls<=100? bills=250:bills)=250+(1.25*(calls-100));

第二行虽然做错了事,但会用C++编译。但在 C 中,?:的结果似乎总是一个右值,不能分配给。

从形式上讲,在这种情况下,错误消息具有误导性。你在代码中写的内容在语法上是荒谬的。此令牌序列

calls<=100? bills=250:bills=250+(1.25*(calls-100));

在标准 C 语法中具有 ho 有效解析。这是一个语法错误。

猜测你的意图,让它解析

你需要
calls <= 100 ? (bills = 250) : (bills = 250+(1.25*(calls-100)));

但是,在这种情况下,?:运算符的更优雅和有意义的应用将是

bills = calls <= 100 ? 250 : 250+(1.25*(calls-100));

您正在使用的 C 编译器使用"非标准"版本的 C 语法,这使得它将您的原始表达式解析为

(calls<=100? bills=250:bills) = (250+(1.25*(calls-100)));

这确实是试图将某些东西分配给非左值。

最新更新