变量已经是可修改的左值了为什么还是报错?

报错
warning C4244: “=”: 从“long double”转换到“long”,可能丢失数据
warning C4800: “long”: 将值强制为布尔值“true”或“false”(性能警告)
error C2106: “=”: 左操作数必须为左值
图片描述

变量b不是可修改的吗?
还是说sqrt函数用错了
求大神指教
把long double去了的话sqrt又会提示多个重载函数

回答:

前 2 个是警告,如果你执意要这样用(也就是你明白你在做什么)可以不用理会。鉴于你可能不太明白,给你解释下为什么警告:第一个,你使用的编译器的 sqrt 函数返回的是 long double 类型,而你把它赋值给了 long 类型的变量 b,改正方法要么把 b 改成 long double 类型,要么把 sqrt 的结果改成 long 类型;第二个,你把 long 类型的值用在了逻辑表达式里面,虽然事实上是允许的(要不就报 error,而不是 warning 了),但可能对性能有影响,不建议这样用。

下面的那个 error,先说为什么错:现在这个阶段,你可以简单把左值理解为赋值号( = )的左边的东西,你写的 b*b=a+100 中就是 b*b,这种写法是不对的。

再说你的程序本意:从程序里面看,你应该是要比较 b*b 和 a+100,而不是赋值,所以应该写成 b*b == a+100

最后再谈谈你的学习方法:猜测你可能没有系统学习过计算机知识(或者单纯的编程知识),可能还可能是在自学,我个人是不建议直接学 C 的,可以学下 Python 等动态语言。虽然现在大学计算机系都是用 C 作为入门课程的,因为他们觉得大家在高中都已经有可计算机系统的知识(高中说我也很无奈啊)。而你确实要学习 C 的话,我建议你先写正确语法(就是编译器不报 error),再写正确语意(连 warning 也没有了)。语法的话,每一本 C 语言教材都会说,语意的话除了自己领会,像 C 陷阱与缺陷你必须知道的495个C语言问题 等书也会讲很多案例。

以上是 变量已经是可修改的左值了为什么还是报错? 的全部内容, 来源链接: utcz.com/p/194937.html

回到顶部