c - 这段代码在 C 中不能正常运行的原因是什么?

标签 c for-loop if-statement

<分区>

我正在尝试学习 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;
}

关于c - 这段代码在 C 中不能正常运行的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47021855/

相关文章:

c# - 带有类型检查 C# 的更好的 If 语句

c - C 中未调用异常处理程序

javascript - 数组项的长度应该是未定义的,但在调试器中它有一个值

python - Python中的随机迭代

excel - 如果 cell.value A = x,则 cell.value N = 公式

php - 优化此 PHP 代码?

c - 5位EEPROM读写

c - 函数未正确返回 char : error during compile

c - 有多少个 GCC 优化级别?

python - 在 Python 中编写更紧凑的 if 语句