【问题标题】:What is the reason why isn't this code running properly in C? [closed]这段代码在 C 中不能正常运行的原因是什么? [关闭]
【发布时间】:2017-10-30 18:22:43
【问题描述】:

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

【问题讨论】:

  • if(a=0) 应替换为 if(a==0)
  • 正如@AditiRawat 提到的,if (a=0) 实际上是将a 分配给int 0。同样,正如 Aditi 所提到的,正确的比较运算符应该是 ==

标签: c for-loop if-statement


【解决方案1】:

if(a==0)不赋值使用比较。

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

if(a=0)if(0) 相同,所以else 部分被执行。1

但那部分也寻找a&gt;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;
}

【讨论】:

  • @MuzafferTemelli.: 如果有什么不明白的地方告诉我
【解决方案2】:

有两个主要问题。 首先是您使用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。因此不能同时满足ifelse if 条件,导致每次都执行else 块。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2021-05-05
    • 2022-07-08
    • 1970-01-01
    • 2012-08-16
    • 2018-04-26
    • 1970-01-01
    • 2013-01-06
    • 2012-06-10
    相关资源
    最近更新 更多