C++;“错误”;赋值的左操作数所需的左值; 我是C++新手,我在C++语言中有一个问题。书末的答案是用帕斯卡语写的 我的C++代码中的问题是,在第12行,我得到了标题中可以找到的错误。有什么想法吗

C++;“错误”;赋值的左操作数所需的左值; 我是C++新手,我在C++语言中有一个问题。书末的答案是用帕斯卡语写的 我的C++代码中的问题是,在第12行,我得到了标题中可以找到的错误。有什么想法吗,c++,pascal,C++,Pascal,帕斯卡码: var n,x:integer; begin n:=0; repeat write('x=');read(X); if x<>0 then if x mod 5 = 0 then n:=n+1 else n:=n-1; until x=0; if n=0 then write('yes') else write('no') end; var n,x:整数; 开始 n:=0; 重复 写('x=');读(X

帕斯卡码:

var n,x:integer;
begin
  n:=0;
repeat
  write('x=');read(X);
  if x<>0 then
    if x mod 5 = 0 then 
      n:=n+1
    else 
      n:=n-1;
until x=0;
if n=0 then 
  write('yes')
else 
  write('no')
end;
var n,x:整数;
开始
n:=0;
重复
写('x=');读(X);
如果x0那么
如果x mod 5=0,则
n:=n+1
其他的
n:=n-1;
直到x=0;
如果n=0,则
写(‘是’)
其他的
写('否')
结束;
<>我的C++代码:

int main()
{
    int x,n;
    cin>>x;
    while(x>0)
    {
        if(x>0)
        {
            if(x%5=0){
                n=n+1; 
            } else {
                n=n-1;
            }
        }
        if(n=0){
            cout<<"Yes"<<;
        } else {
            cout<<"No"<<; 
        }
    }

}
intmain()
{
int x,n;
cin>>x;
而(x>0)
{
如果(x>0)
{
如果(x%5=0){
n=n+1;
}否则{
n=n-1;
}
}
如果(n=0){

CUT< P> C++中的条件(同时,如果……),你需要使用= = .< /p> < p>你有一个简单的键入:<代码>(x% 5=0){< /C> >是试图分配0到<代码> x% 5 < /C>(由于运算符优先模数是在赋值之前计算)。<代码> x% 5 < /Cord>不能被分配到(它不是一个LValk)编译器告诉你了

当然,解决方法是编写
x%5==0

在这种情况下,您很幸运,错误是在编译时发现的。类似于
if(n=0)
(第18行)的东西可能不是,因为
x=0
是一个值为0的表达式

有两种方法可以防止这种情况:

  • 请确保您的编译器警告尽可能具有攻击性。对于gcc,我使用
    -Wall-Wextra
    ,这种组合足以解决这个常见问题
  • 一些开发人员会编写
    if(0==x)
    ,因为错误的
    if(0=x)
    会在编译时被发现,试图分配给
    0
    。我个人觉得这很令人困惑

赋值运算符需要左值意味着左侧操作数需要是可以保存值的变量/位置。 这就是错误的含义。
if语句中需要的是==可能不是其他答案中提到的赋值

如果(x%5=0)

应该是

如果(x%5==0)


“x%5”不是一个左值,因为您无法为其赋值,因此出现错误。

第12行是“如果(x%5=0){”,而我们在这里:
if(n=0)
应该是
if(n==0)
也是。但是在浪费我们的时间问一些琐碎的问题之前,你真的应该打开编译器警告并学习语言的基础知识。另外,为了可读性,请缩进你的代码并删除额外的连续空行,谢谢。这是个小问题“平等”->“平等”