您好我正在尝试在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;
}
我不关心它背后的数学是否正确,我想知道自己的学习经历。但是,如果有人能帮助我用一个易于理解的解释来解决这个问题,我将不胜感激!我对编程很陌生,所以我还不习惯行话。我期待你的建议!
答案 0 :(得分:10)
您在
中使用=
代替==
while (p = false){
当你这样做时,你将false
分配给p
,表达式的结果是false
,它会在while
循环中进行测试,从而导致退出循环
答案 1 :(得分:8)
更好的是,
while(!p)
毕竟,这就是运营商的目的。
答案 2 :(得分:3)
while (p = false) // obvious error ...
如果您找不到它:==
而不是=
。
答案 3 :(得分:3)
将其更改为(false == p)
基本上这是按顺序发生的事情:
当您说(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
,因此不运行。