C if中的左值-布尔值无效
我正试图为我的c程序做一个基本测试。不幸的是,我真的遇到了问题和麻烦 使用此表达式: 这是我的全部代码C if中的左值-布尔值无效,c,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赋值中的左值无效 我不明白为什么会这样。有帮手吗?通常的帮手。您在条件中有赋值,而不是相等检
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)
此外,即使它们是多余的,我也会使用更多的括号(这对我很有帮助)
根据您的完整代码,问题如下: 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))
其他一些事情:
你测试一个是否是除数,它总是这样
为什么从x
开始只需要测试它?为什么不在x-1
处启动循环,并在if
中去掉一半的测试
你说prim
返回一个int
,但它不返回。仔细检查你的代码。你有x%1=0
当它应该是=
是的,你把操作符搞混了
试试这个:
if((x%i) == 0 && i != x)
括号将确保先执行模运算,然后再将其与=
进行比较(=
=>比较,=
=>分配)
一点解释:
首先,使用赋值运算符(single=)。也就是说,您告诉计算机取“0”的值并将其分配给x%i。然而,x%i不是一个变量,而是一个方程。这就是你的编译器所抱怨的。”无效的左值'->'无法分配给等式标记'左侧的值。在另一个错误中,您混淆了事情的顺序。“!”马克的意思是“不”。所以我不等于x。你写的是:我不等于x。这本来可以奏效,但很可能不会给你想要的结果。(因为非变量将其反转)
invert
在这个上下文中意味着,它取数字中的每一个和每一个零,并将其切换。假设您有1000 0001(无符号字符),则在反转后为011110。如果(x%i==0&&i!=x)
使用此选项
=
是赋值运算符,=
是比较运算符
并替换=代码>与一起使用=代码>这里有几个问题
在C中,=
用于相等性检查,但您使用的是=
,它是赋值李>
不平等(不等于)是=代码>非=代码>
因此,代码应该是
if (x % i == 0 && i != x) {
}
(错误1:您试图打印两个带有一个变量x的整数值。)
为%i再加一个x或从printf语句中删除%i。)如果您告诉我们这应该做什么,那将非常有用。你觉得我怎么样!x
Dos?添加了代码。希望现在更清楚哦,谢谢你的否决票。我真的很喜欢StAdvExcel上的成熟的人。人们只是不考虑“修复我的微不足道的语法错误,给出了一个编译器错误,确切的描述了错误,精确地描述了错误”问题特别有趣。琐事只是一个观点。对我来说,这是非常困难的不是来自编程背景。是的,我在谷歌上搜索过。这只是让一些人无缘无故地投了反对票,但我想这就是社区。初学者不受欢迎。修正。缺少开括号。我还将检查从sqrt(x)到2的分隔符。(或反之亦然)这一次成功了。你能解释一下我的版本到底出了什么问题吗:(我很想知道我在这里犯的错误当然。首先,你使用了赋值运算符(=
)。也就是说,您告诉计算机取“0”的值并将其分配给x%i
。但是,x%i
不是一个变量,而是一个方程式。这就是您的编译器抱怨的问题。“无效的左值”->“无法分配给方程式标记左侧的值”。在另一个错误中,您混淆了事情的顺序。编译器“!”标记的意思是“不”。所以它是i NOT EQUAL x
。你写的是:i NOT EQUAL NOT x
。这本来可以起作用,但很可能不会给你想要的结果。(因为NOT variable将其反转)。+1因为你是唯一一个真正解释的人(在注释中,但总比没有好)问题而不是仅仅给出答案。我认为你应该在答案中添加解释。@Efffe谢谢你。以我的经验,大多数人不希望冗长的解释,而是希望快速、直截了当的回答。当然,如果有人想问,我会详细解释:)你用什么样的调试器?@blacksmth-你是说编译器?我的头这些不是真正的警告信息,只是我看到的问题。。。但是当我编译代码时,我使用的是gcc-Wall-Werror
。如果你真的是指调试器,我使用gdb
你只重复了前面给出的答案中的一个。
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
}
}
}