为什么不';这段代码在C中不能正常运行吗?

为什么不';这段代码在C中不能正常运行吗?,c,for-loop,if-statement,C,For Loop,If Statement,我正在尝试学习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 &g

我正在尝试学习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;
}
#包括
内部主(空)
{
INTA;
int b=1;
int i=0;
printf(“输入一个数字:”);
scanf(“%d”和“&a”);
如果(a=0)
printf(“阶乘=1”);
如果(a>0),则为else{
对于(i=1;i
如果(a==0)
不赋值,则使用比较

您想使用比较,但最终使用赋值

if(a=0)
if(0)
相同,因此执行
else
部分。1

但该部分也会查找
a>0
,情况并非如此

因此,它会打印
致命错误

1.发生这种情况是因为赋值表达式的结果是表达式的值

我需要做什么来计算阶乘

fact(0)=1
fact(1)=1
fact(n)=n*fact(n-1);
所以你会这样做

for(int i=1;i<=a;i++)
  b*=i;

有两个主要问题。 首先是使用
if(a=0)
,结果是赋值而不是比较,比较是通过
if(a=0)
实现的。 其次


另外,值得一提的是,您总是出现
致命错误的原因是因为您在
if
条件下所做的操作。由于
if(a=0)
,变量
a
被赋值为
0
。因此不能同时满足
if
else-if
条件,导致每次执行
else
块。

if(a=0)
应替换为@AditiRawat提到的
if(a==0
if(a=0)
实际上是将
a
赋值给int
0
。同样,正如Aditi所提到的,正确的比较运算符应该是
==
@MuzafferTemelli。:如果您有什么不明白的地方,请告诉我
#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;
}
for(i=1 ; i<=a ;i++)
{
 b = 1;
 b *= i; 
}
for(i=1 ; i<=a ;i++)
{  
     b *= i; 
}