需要输入整数,但它说左值需要作为赋值的左操作数 [已关闭]

need to put integer number but it says lvalue required as left operand of assignment [closed]

提问人:Beginner Programmer 提问时间:10/7/2022 最后编辑:Vlad from MoscowBeginner Programmer 更新时间:10/13/2022 访问量:80

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

去年关闭。

编辑:修正了一些错别字,还添加了更多上下文

所以我试着把这个代码放进去:

#include <stdio.h>
int main() {
    float ps, ls, ms, es;
    printf("Enter the project score: ");
    scanf("%d", &ps);
    printf("Enter the long exam score: ");
    scanf("%d", &ls);
    printf("Enter the midterm exam score: ");
    scanf("%d", &ms);
    90 = (ps * 0.15) + (ls * 0.2) + (ms * 0.25) * (es * 0.4);
    printf("Final exam score needed: %d", es);
    return 0;
}

正如我想要的,这个方程 90=85(.15)+88(.2)+92(.25)+x(.4)

但它指出“左值需要作为赋值的左操作数”

C 常量 scanf 赋值运算符

评论

4赞 10/7/2022
您正在尝试将一个值赋值到常量中。我猜也许你希望编译器能为你解决一个数学方程式或类似的东西。这并不完全是 C 语言(事实上,我所知道的大多数语言)都有效。我建议你先学习这门语言的基础知识。或者,如果您只对求解数学方程式感兴趣,那么还有其他工具可以做到这一点,例如 Maple,甚至是在线网站 wolframalpha.com90
2赞 Iguananaut 10/7/2022
我不得不做双重考虑,但是,您是否尝试使用 C 语法来求解代数表达式中的未知变量?C 不是计算机代数系统......
2赞 Eugene Sh. 10/7/2022
以 的 lhs 方式重写方程。es=
1赞 10/7/2022
你想要的结果是什么???
1赞 Thomas Jager 10/7/2022
@BeginnerProgrammer 大多数通用编程语言不会为您求解方程。如果你想要一个像这样简单的结果,你最好的办法是在纸上做代数,然后输入你真正想让计算机做什么。

答:

0赞 stark 10/7/2022 #1

你有

90=85(.15)+88(.2)+92(.25)+x(.4)

这应该是

// solve equation for x
float x = (90 - (85*(.15)+88*(.2)+92*(.25))) / .4;
printf("Final exam score needed: %f\n", x);

评论

0赞 Beginner Programmer 10/7/2022
谢谢,但期末考试成绩为0。
0赞 Eugene Sh. 10/7/2022
因为是,你正在尝试用它打印它esfloat%d
0赞 Vlad from Moscow 10/7/2022 #2

对于初学者,您将变量声明为具有float

float ps, ls, ms, es;

因此,要为变量输入值,您必须使用转换说明符而不是 likefd

printf("Enter the project score: ");
scanf("%f", &ps);

本声明

90 = (ps * 0.15) + (ls * 0.2) + (ms * 0.25) * (es * 0.4);

没有意义。不能更改整数常量。此外,目前还不清楚为什么使用幻数。90

与下一个语句一样,您尝试使用无效的转换说明符再次输出变量的值,而不是您的意思是esdf

es = (ps * 0.15) + (ls * 0.2) + (ms * 0.25) * (es * 0.4);

printf("Final exam score needed: %f\n", es);

但是,请注意变量未初始化。因此,程序将具有未定义的行为。es

也许你的意思是(虽然很难说你到底是什么意思)

es = (ps * 0.15) + (ls * 0.2) + (ms * 0.25);
es *= 0.4;
0赞 Persixty 10/7/2022 #3

正如其他人指出的那样,您需要使用 来读取 .%ffloat

但这里有一个求解方程的例子: 鉴于项目、长期考试和期中考试的分数,期末考试的加权平均分数为 90 分。

C 是一种“命令式”过程编程语言。 您需要指定如何派生该值。 不能指望它能解决你的方程式。 意思是“将右边的值分配给左边的变量”。 这不是平等的声明,甚至不是逻辑测试。这是一种将值赋值到变量中的行为。es=

我之所以费力,是因为编程中的“突破性”理解是等于“=”并不总是意味着它在数学中的作用。事实上,很少这样做!

如果你尝试下面的 90、90 和 90,它会说 90(这是有道理的)。 如果你尝试 80、85 和 90,你需要 93.125 的最终分数。

此代码进行回溯检查,以显示计算出的值给出了正确的加权分数。

#include <stdio.h>
int main() {
    float ps, ls, ms, es;
    printf("Enter the project score: ");
    scanf("%f", &ps);
    printf("Enter the long exam score: ");
    scanf("%f", &ls);
    printf("Enter the midterm exam score: ");
    scanf("%f", &ms);
    
    printf("\nps=%f ls=%f ms=%f\n",ps,ls,ms);

    es=(90-(ps * 0.15) - (ls * 0.2) - (ms * 0.25) )/0.4;
    printf("Final exam score needed: %f\n", es);
    float check=ps*0.15+ls*0.2+ms*0.25+es*0.4;
    printf("Giving final score of %f\n",check);
    return 0;
}

典型输出:

Enter the project score: Enter the long exam score: Enter the midterm exam score: 
ps=80.000000 ls=85.000000 ms=95.000000
Final exam score needed: 93.125000
Giving final score of 90.000000