我正试图破解我的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赋值中的无效左值
我不明白为什么会这样。任何助手?
答案 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)
这里有几个问题。
==
中用于等式检查,但您使用的是=
,即赋值。 !=
而非=!
因此代码应为
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。)