如果中的cinvalid lvalueboolean



我正试图破解我的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分配中的无效左值

我不明白为什么会发生这种事。有帮手吗?

是的,您把运算符搞得有点乱。

试试这个:

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

括号将确保在将模与==(===>Compare,==>Assign(进行比较之前先执行模

一点解释:

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

invert在这种情况下意味着,它取数字中的每一个1和每一个0,并将它们切换。假设您有1000 0001(无符号字符(,那么在反转之后它将是0111 1110。

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

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
if(x%i=0 && i=!x)

您想要:

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

其他一些东西:

你测试一个是否是除数,它一直都是

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

你说prim返回一个int,但它没有。

通常的一个。条件中有赋值,而不是相等性检查。

试试这个:

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

此外,即使它们是多余的,我也会使用更多的括号(这对我帮助很大(

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

仔细检查您的代码。您有x%1 = 0,而它应该是==

这里有几个问题。

  1. 在C中,==用于相等性检查,但您使用的是=,它是赋值
  2. 不等式(不等于(是!=而不是=!

因此,代码应该是

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

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

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

并用!= 替换=!

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。(

最新更新