C - 我的scanf永远不会停止输入

时间:2018-05-20 04:03:01

标签: c for-loop compilation scanf factorial

所以,当我认为尝试制作一个简单的阶乘计算器是一个不错的主意时,我会在循环中乱七八糟。这是代码:

#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进行了桌面检查!它有效,但我根本无法编译它。

感谢。

2 个答案:

答案 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;
}

<强>修改:

  1. 在for循环条件中将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)
相关问题