无效的左值 - 在if中的布尔值

时间:2013-03-11 16:16:32

标签: c

我正试图破解我的c程序的初级测试。不幸的是,我遇到了问题并陷入了困境。

使用这个表达式:

这是我的完整代码

int prim(int x)
{
 int i,j;
 for(i=x;i>0;i--)
 {
  if(x%i==0 && i=!x)
  {
   printf("%i no prime %i",x);
  }
 }
}  

给我这个错误:10 D:\ C \ L2 \ main.c赋值中的无效左值

我不明白为什么会这样。任何助手?

8 个答案:

答案 0 :(得分:3)

是的,你把运营商混淆得很糟糕。

试试这个:

if((x%i) == 0 && i != x)

括号将确保在将模数与==进行比较之前先执行模数(== =>比较,= =>分配)

一点解释:

首先,您使用了赋值运算符(single =)。这意味着,您告诉计算机取值为'0'并将其分配给x%i。但是,x%i不是变量,而是等式。这就是你的编译器所抱怨的。 '无效左值' - > '无法分配等式标记左侧的值'。在另一个错误中,你混淆了事情的顺序。 '!'标记表示'不'。所以我不等于x。你写的是:i EQUAL NOT x。那可能实际上有效,但很可能不会给你想要的结果。 (因为NOT变量将其反转)。

在这种情况下,

invert意味着它需要数字中的每一个零并切换它们。假设您有1000个0001(无符号字符),则在反转后它将是0111 1110。

答案 1 :(得分:2)

根据您的完整代码,问题是:

1)错误:你的!=倒退了。这与=!

不同
if(x%i==0 && i!=x)  // this is correct

2)警告:你告诉printf你要打印两个变量,但你只给它一个:

printf("%i no prime",x);  // this is correct

3)警告:你的函数被标记为返回一个int,但它什么都没有返回:

void prim(int x)  // this is correct

答案 2 :(得分:2)

if(x%i=0 && i=!x)

你想:

if (((x % i) == 0) && (i != x))

其他一些事情:

你测试一个是否为除数,它总是如此。

为什么从x开始只需要测试它?为什么不在x-1开始循环并摆脱if中的一半测试?

您说prim会返回int,但事实并非如此。

答案 3 :(得分:1)

通常的一个。你有条件,而不是平等检查。

请改为尝试:

if(x%i == 0 && i!=x)

另外,即使它们是多余的,我也会使用更多括号(它对我有很多帮助)

if( (x%i == 0) && (i!=x) )

答案 4 :(得分:1)

仔细检查您的代码。如果x%1 = 0,则==为{{1}}。

答案 5 :(得分:1)

if(x%i==0 && i!=x)使用此

=是赋值运算符,==是比较运算符

并将=!替换为!=

答案 6 :(得分:1)

这里有几个问题。

  1. 在C ==中用于等式检查,但您使用的是=,即赋值。
  2. 不平等(不等于)!=而非=!
  3. 因此代码应为

    if (x % i == 0 && i != x) { 
    
    }
    

答案 7 :(得分:0)

int prim(int x)
{
 int i,j;
 for(i=x;i>0;i--)
 {
  if(x%i==0 && i=!x)
  {
   printf("%i no prime %i",x);  // Error 1
  }
 }
} 

(错误1:您尝试使用一个变量x ..

打印两个整数值

为%i提供另一个x或从printf语句中删除%i。)