虽然循环,似乎什么都没做?

时间:2010-09-27 09:30:54

标签: c++ loops operators iteration while-loop

您好我正在尝试在C ++中创建一个函数,它接受一个数字,然后通过遍历循环来确定它是否为素数,以确定它是否为倍数,然后确保它不是通过一系列的测试。然而,似乎循环甚至没有被贯穿。无论循环在哪里,我都告诉它输出,但我没有输出。这是代码:

#include <iostream>

using namespace std;

int main()
{
    int j =1;
    int z = 0;
    int i = 10;
    bool p = false;
    while (p = false){
        cout << "not starting ifs";
        z=i%j;
        if (z==0 && j>2){
        p=true;
        cout << "not prime" << endl << "loops to if";
        }
        else if (j==1){
            j++;
            cout <<"loops to else if 1";
            }
        else if ( i==2 || j==i ){
          p = true;
          cout << "prime" << endl << "loops to else if 2";
            }
            else {
            j++;
            cout << "loops to else";
                }
        }
            return 0;
}

我不关心它背后的数学是否正确,我想知道自己的学习经历。但是,如果有人能帮助我用一个易于理解的解释来解决这个问题,我将不胜感激!我对编程很陌生,所以我还不习惯行话。我期待你的建议!

6 个答案:

答案 0 :(得分:10)

您在

中使用=代替==
while (p = false){

当你这样做时,你将false分配给p,表达式的结果是false,它会在while循环中进行测试,从而导致退出循环

答案 1 :(得分:8)

更好的是,

while(!p)

毕竟,这就是运营商的目的。

答案 2 :(得分:3)

while (p = false) // obvious error ...

如果您找不到它:==而不是=

答案 3 :(得分:3)

将其更改为(false == p)

基本上这是按顺序发生的事情:

  1. p被指定为false
  2. p转换为bool
  3. 当您说(p = false)时,'p'被赋值为'false'。在此之后,while循环的布尔条件测试'p'的值,现在是false,并且永远不会输入循环。

答案 4 :(得分:3)

由于您的编译器似乎没有向您发出警告,您应该了解如何打开警告,或者学习使用“Yoda-conditions”的习惯:

while (false = p)

将导致编译错误。

答案 5 :(得分:3)

您需要将while (p = false)更改为while (p == false)

说明:在C / C ++中,=分配属性,而==比较值。您在这里基本上做的是将false分配给p。然后while循环检查表达式的值,p,等于false,因此不运行。