我正试图破解我的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
,而它应该是==
。
这里有几个问题。
- 在C中,
==
用于相等性检查,但您使用的是=
,它是赋值 - 不等式(不等于(是
!=
而不是=!
因此,代码应该是
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。(