Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-我的scanf从不停止输入_C_For Loop_Compilation_Scanf_Factorial - Fatal编程技术网

C-我的scanf从不停止输入

C-我的scanf从不停止输入,c,for-loop,compilation,scanf,factorial,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

所以,当我觉得制作一个简单的阶乘计算器是个好主意的时候,我正在处理一些循环。代码如下:

#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;
}
#包括
int main(int argc,char const*argv[]
{   
int-num;
INTANS;
printf(“输入任何数字:”);
scanf(“%d”和&num);
ans=num;
for(int i=(num-1);i=1;--i)
{
ans*=i;
}
printf(“%d!是%d\n”,num,ans);
返回0;
}
很简单。然而,我的问题是,当我必须输入一个数字时,例如5,scanf永远不会停止。它并没有继续执行,而是允许我在按下enter键后输入更多的数字。事实上,它从未停止过,我可以连续数小时不运行它。知道为什么吗

我和5个人做了案头核对!它工作了,但我根本无法编译它

谢谢。

这应该可以:

#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;
}
#包括
int main(){
int-num;
INTANS;
printf(“输入编号:”);
scanf(“%d”和&num);
ans=num;
对于(inti=(num-1);i>1;--i)
ans=ans*i;
printf(“%d!是%d\n”,num,ans);
返回0;
}
修改:

  • 在for循环条件下,将
    i=1
    更改为
    i>1
  • 这应该起作用:

    #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;
    }
    
    #包括
    int main(){
    int-num;
    INTANS;
    printf(“输入编号:”);
    scanf(“%d”和&num);
    ans=num;
    对于(inti=(num-1);i>1;--i)
    ans=ans*i;
    printf(“%d!是%d\n”,num,ans);
    返回0;
    }
    
    修改:

  • 在for循环条件下,将
    i=1
    更改为
    i>1
  • 这不是
    scanf()
    而是
    for
    循环,该循环从未停止,因为在
    for
    循环条件下,您正在将
    1
    分配给
    i

    for (int i = (num-1); i = 1; --i)
                          ^^^^^
    
    for
    循环在执行循环体之前评估条件,条件
    i=1
    将始终评估为
    true
    。执行循环体后,
    i
    递减,然后再次评估条件,将
    1
    分配给
    i
    。因此,循环最终会无限执行

    将循环条件的
    更改为
    i>1

    for (int i = (num-1); i > 1; --i)
    
    这不是
    scanf()
    而是
    for
    循环,该循环从未停止,因为在
    for
    循环条件下,您正在将
    1
    分配给
    i

    for (int i = (num-1); i = 1; --i)
                          ^^^^^
    
    for
    循环在执行循环体之前评估条件,条件
    i=1
    将始终评估为
    true
    。执行循环体后,
    i
    递减,然后再次评估条件,将
    1
    分配给
    i
    。因此,循环最终会无限执行

    将循环条件的
    更改为
    i>1

    for (int i = (num-1); i > 1; --i)
    

    为什么循环条件中有i=1?编译器应该用“somename.c:13:29:警告:将赋值结果用作不带括号的条件[-wparenthess]”来警告您。你没看到那个警告吗?根本没有警告。什么都没有,因为在编译器读取printf之后,我根本无法运行程序。然而,这是个错误。谢谢可能是因为您没有使用-Wall。当您在调试器中运行程序时,您没有看到它将进入
    for
    语句并永远循环吗?为什么您认为它被困在
    scanf
    ?为什么在循环条件中有i=1?编译器应该用“somename.c:13:29:警告:使用赋值结果作为不带括号[-wparenthes]的条件”来警告您。你没看到那个警告吗?根本没有警告。什么都没有,因为在编译器读取printf之后,我根本无法运行程序。然而,这是个错误。谢谢可能是因为您没有使用-Wall。当您在调试器中运行程序时,您没有看到它将进入
    for
    语句并永远循环吗?你为什么认为它卡在了scanf中?非常感谢!问题是你指出的情况。非常感谢!问题是你指出的情况。