For循环只运行一次

时间:2013-02-14 21:45:40

标签: c

int input;
int factorial;
int half;

printf("Enter the number you wish to calculate: ");
scanf("%d", &input);    

for(x=1; x<input; x++);
{
    half = input - 1;
    factorial = input * half;
}

printf("%d\n", factorial);

return 0;

它正在运行一次,给我输入数字*(输入数字 - 1),考试,输入是5它给出20。我做错了什么阻止它继续运行?

5 个答案:

答案 0 :(得分:6)

for循环之后你有一个;。删除它,你会没事的:

for(x=1; x<input; x++) {
 // your stuff
}

您还需要在循环中修复另一个错误,如其他答案中所述。

答案 1 :(得分:3)

您不会在循环中更改input,因此您的代码可以归结为(对于您的样本输入为5):

for (i = 1; i < 5; i++) {
   half = 5 - 1;
   factorial = 5 * 4;
}

阶乘5(5!)将是5 * 4 * 3 * 2 * 1,应该是:

factorial = 1;
for (i = input; i > 1; i--) {
   factorial = factorial * i;
}

答案 2 :(得分:3)

  

我做错了什么?

有很多事情你做错了:

  • 命名变量half是错误的,除非你指定一个真正属于它的一半的值
  • 您的循环不使用先前的factorial
  • 您总是将input乘以input-1,永远不会更改input
  • 您未将factorial初始化为1

P.S。你的循环空了这一事实是你遇到麻烦最少的。

P.P.S。要做得好,请考虑如何在纸上执行此操作:从1开始,然后将之前的结果与2input的数字相乘。现在编写与C程序相同的算法:使用factorial作为中间结果,并使用循环中的x作为1input之间的当前数字

答案 3 :(得分:1)

您的循环每次使用相同的值(inputhalf

factorial = 1;
for(x=2; x<=input; x++)
{
    factorial *= x;
}

答案 4 :(得分:1)

你实际上并没有改变状态,所以你应该只获得input * (input - 1)。为什么?好吧,half 总是input - 1,而input永远不会改变。同时,每次逐步完成循环时,factorial的值都会简单地分配给该产品

我认为你的意图是

factorial = 1;
// no sense in starting from 1, factorial already is 1
for(x = 2; 
    // using <= so as to *include* the original input value.
    x <= input; x++)
{
    // the same things a factorial = factorial * x
    factorial *= x;
}
顺便说一句:你也可以补偿负面因素。