2013-03-26 86 views
-1

我总是得到错误((智能感知:表达式必须是一个可修改的左值)) 为表达式使用与“for”,请帮助。C++编程问题

for (c=2 ; c <= x -1 ; c++) 
    if (x % c = 0) 
     cout << "not prime" ; 
    else cout << "prime"; 
+0

这是封闭的,但为什么每个人都缺少一个简单点:如果数字不能被任何数字整除 - 它如何可以是质数?让测试循环先完成! – Ajay 2013-03-27 05:34:28

+0

@Aayay - 引物编号就是这样,它只能被一个整除。你对“素数”的理解是什么? – 2013-03-27 07:23:24

+0

@KirilKirov - 让我们说被检查的数字是9 ..所以,通过循环,它被视为素数。考虑另一个数字25,它被处理3次。明白我的意思吗? (是的,当然,用'c%x'测试) – Ajay 2013-03-27 07:25:31

回答

1

你缺少一个=

if (x % c == 0) 
      ^^---- 

=是赋值,==是一个平等的测试。

1

=赋值运算符。什么你要找的是比较运算==

if (x % c == 0) 
//   ^^ 

Live Demo

6

我想你想的x % c结果与0比较。在这种情况下,

if (x % c = 0) 

这必须是

// --------v 
if (x % c == 0) 

注意额外=


的原因是,x % c不返回修改的左值和只使用一个=,你要assing 0x % c的结果,这是错误的。

2

至于我可以告诉你可能是指==,而不是=这里:

if (x % c = 0) 

所以这样的:

if (x % c == 0) 

在第一种情况下,你想分配给结果的%这是一个临时操作,不能分配给操作。此前的thread涵盖了临时性的一些问题。这篇文章更深入一点,但可能会让你更好地理解Understanding lvalues and rvalues in C and C++

2

你在if线缺少=

for (c=2 ; c <= x -1 ; c++) 
    if (x % c == 0) 
     cout << "not prime" ; 
    else cout << "prime"; 

(不是你的代码会告诉你,如果一个数是素数;将打印无论是每一个数字比它小的倍数)

0

我想,你应该再看看x % c == 0。你将0赋给x模c的结果。

对我来说,你的代码行之有效如下(Objective-C的,所以没有@ COUT @,我们使用@NSLog(); //:

for (c = 2; c <= x-1; c++) 
    if (x % c == 0) NSLog(@"not prime"); 
    else NSLog(@"prime");