我正在尝试学习 C,但我的代码无法正常运行。它总是给出 fatal error 。我认为 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;
}
最佳答案
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;
}