C程序 - 作为左操作数分配所需的左值 -

问题描述 投票:-1回答:2
#include <stdio.h>
#include <stdlib.h>

int main()
{
int N,i ,j ,m ;
int T[i][j] ;
do{
    printf("Saisir N");
    scanf("%d", &N);
    i=N ; j=N;
}while(N>10 && N<0);
for(m=1;m<(N/2);m++){

    for(i=1;i<N;i++){

          for(j=1;j<N;j++){
                if ( i=(m-1) && j=(N-m+1)){ // i get the error in this line
                    T[i][j]=m;
                }
                if ( i=(m-1) && j=(m-1) ){  // i get the error in this line
                    T[i][j]=m;
                }
                if ( i=(N-m+1) && j=(N-m+1) ){ // i get the error in this line
                    T[i][j]=m;
                }
                if (i=(N-m+1) && j=(m-1)){ // i get the error in this line
                    T[i][j]=m;
                }
          }

    }
}
}    

我在“if conditions”的行中得到了这个错误“左值作为赋值的左值”,我不知道问题出在哪里。谢谢

c lvalue
2个回答
2
投票
if ( i=(m-1) && j=(N-m+1))

&& than = cause的优先级更高

(m-1) && j

首先要评估,所以这就成了

if ( i=((m-1) && j)=(N-m+1))

“=”具有从右到左的关联性,因此下一步操作将是

((m-1) && j)=(N-m+1)

左侧不是可修改的左值(因为中间步骤没有为它们分配存储空间),导致左侧错误需要左值。

可能是你想要的

if ( i==(m-1) && j==(N-m+1))

0
投票

你得到错误的原因是因为if (i = something)没有做你认为它做的事情。你需要关系运算符==来检查是否相等。不是=

因此,在if语句的条件下,将=s更改为==s。

© www.soinside.com 2019 - 2024. All rights reserved.