我正在尝试学习C但是我的代码运行不正常。它总是会给出致命的错误。我认为for循环存在问题。我该如何修复它?
#include<stdio.h>
int main( void )
{
int a ;
int b = 1 ;
int i = 0 ;
printf("Enter a number:");
scanf("%d",&a);
if(a=0)
printf("Factorial=1");
else if (a > 0){
for(i=1 ; i<=a ;i++){
b = 1;
b *= i;
}
printf("Factorial=%d",b);
}
else
printf("FATAL ERROR");
return 0;
}
答案 0 :(得分:2)
if(a==0)
未分配使用比较。
您想使用比较,但最终使用了作业。
if(a=0)
与if(0)
相同,因此执行else
部分。 1
但该部分也会查找a>0
,但事实并非如此。
所以它会打印FATAL ERROR
。
1。发生这种情况是因为赋值表达式的结果是表达式
的值我需要做些什么来计算阶乘?
fact(0)=1
fact(1)=1
fact(n)=n*fact(n-1);
所以你会做类似
的事情for(int i=1;i<=a;i++)
b*=i;
您不需要b=1
部分,因为它正在制作所有内容1.因此您的计算值不会被保留。
所以完整的更正代码将是
#include<stdio.h>
int main()
{
int a;
int b = 1 ;
int i = 0 ;
printf("Enter a number:");
scanf("%d",&a);
if(a=0)
printf("Factorial=1");
else if (a > 0){
for(i=1 ; i<=a ;i++){
b *= i; // don't overwrite value of b with 1
}
printf("Factorial=%d",b);
}
else
printf("FATAL ERROR");
return 0;
}
答案 1 :(得分:1)
有两个主要问题。
首先使用if(a=0)
会导致分配代替if(a==0)
实现的比较。
其次
for(i=1 ; i<=a ;i++)
{
b = 1;
b *= i;
}
这段代码也有问题。您在每次迭代后都会b=1
覆盖中间结果,从而导致错误的答案。由于您已在代码中将b
初始化为1,因此根本不需要此行。
for(i=1 ; i<=a ;i++)
{
b *= i;
}
另外值得一提的是,您始终获得fatal error
的原因是因为您在if
条件下所做的事情。由于if(a=0)
,变量a
被赋值0
。因此,不满足if
和else if
条件,导致每次都执行else
块。