我正在学习C ++ atm,但我偶然发现了一些我无法宣布它为什么会发生的事情。 我无缘无故地在这里寻找我想要做的事情的确切解决方案,我们将非常感谢您的解释!
这是关于他的代码:
int Factorial(int x) {
if (x = 0) {
x = 1;
} else {
int sum = 1;
for (int counter = 1; counter <= x; ++counter) {
sum *= counter;
}
x = sum;
}
return x;
}
因此,我们假设我使用int 5(Factorial(5))调用Factorial()。 不知怎的,一旦程序通过if(x = 0)语句,它就会将它(x)重置为0,至少这是我在Visual Studio中可以看到的所有内容,因为它直接从if语句中跳过sum整数的声明。
我希望有些人可以澄清我这里发生的事情。
提前谢谢!
答案 0 :(得分:6)
if(x = 0)
需要
if(x==0)
目前,您要将x
指定为0,然后检查结果(0
)是否为true
,这是永远不会的,因为0
是false
。
此外,修改参数变量是不好的做法。您可以通过更改返回值来简化代码并避免这样做:
int Factorial(int x) {
if (x == 0) {
return 1;
}
int sum = 1;
for (int counter = 1; counter <= x; ++counter) {
sum *= counter;
}
return sum;
}
答案 1 :(得分:5)
正如其他答案所述,这是因为你需要改变
if (x = 0)
到
if(x == 0)
一般来说,为了避免这种情况,建议做
if(0 == x)
因为在这种情况下,如果只有一个'='而不是两个,则会抛出错误
答案 2 :(得分:3)
你自己做的。 =
是作业,==
是比较。
if (x = 0) {
应该是
if (x == 0) {