0

我正在尝试为我的 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 invalid lvalue in assignment

我不明白为什么会这样。有帮手吗?

4

8 回答 8

3

是的,你把运营商搞混了。

尝试这个:

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

括号将确保先执行模数,然后再将其与==( ===> 比较,==> 分配)

一点解释:

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

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

于 2013-03-11T16:18:00.853 回答
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
于 2013-03-11T16:17:49.033 回答
2
if(x%i=0 && i=!x)

你要:

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

其他一些事情:

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

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

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

于 2013-03-11T16:17:53.413 回答
1

平常的那一个。您在条件中有分配,而不是相等检查。

试试这个:

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

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

if( (x%i == 0) && (i!=x) )
于 2013-03-11T16:17:39.337 回答
1

仔细检查您的代码。你有x%1 = 0什么时候应该==

于 2013-03-11T16:18:00.783 回答
1

if(x%i==0 && i!=x)用这个

=是赋值运算符并且==是比较运算符

并替换=!!=

于 2013-03-11T16:18:04.600 回答
1

这里有几个问题。

  1. 在 C==中用于相等性检查,但您使用=的是分配。
  2. 不等式(不等于)!=不是=!

因此代码应该是

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

}
于 2013-03-11T16:18:24.660 回答
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。)

于 2013-03-12T10:43:37.357 回答