所以,当我认为尝试制作一个简单的阶乘计算器是一个不错的主意时,我会在循环中乱七八糟。这是代码:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int num;
int ans;
printf("Enter any number: ");
scanf("%d", &num);
ans = num;
for (int i = (num-1); i = 1; --i)
{
ans *= i;
}
printf("%d! is %d \n", num, ans);
return 0;
}
非常简单。然而,我的问题是,当我必须输入一个数字时,例如5,scanf就永远不会停止。我没有继续执行,而是让我在输入后输入更多数字。事实上它永远不会停止,我可以在没有运行的情况下添加数小时。知道为什么会这样吗?
我用5进行了桌面检查!它有效,但我根本无法编译它。
感谢。
答案 0 :(得分:2)
这应该有效:
#include <stdio.h>
int main() {
int num;
int ans;
printf("Enter number: ");
scanf(" %d", &num);
ans = num;
for(int i = (num - 1); i > 1; --i)
ans = ans * i;
printf("%d! is %d\n", num, ans);
return 0;
}
<强>修改:强>
i = 1
更改为i > 1
。答案 1 :(得分:1)
这不是scanf()
,而是for
循环,它永远不会停止,因为您在1
循环条件中将i
分配给for
:
for (int i = (num-1); i = 1; --i)
^^^^^
for
循环在执行循环体之前评估条件,条件i = 1
将始终评估为true
。执行循环体后,i
递减,然后再次评估条件,将1
分配给i
。因此,循环最终无限执行。
将for
循环条件更改为i > 1
:
for (int i = (num-1); i > 1; --i)