Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C if中的左值-布尔值无效_C - Fatal编程技术网

C if中的左值-布尔值无效

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赋值中的左值无效 我不明白为什么会这样。有帮手吗?通常的帮手。您在条件中有赋值,而不是相等检

我正试图为我的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
      }
     }
    }