for循环for for循环而没有初始化

时间:2014-02-22 16:10:34

标签: c

这是我编译和执行的C代码。

#include <stdio.h>

int main()
{
    unsigned i = 0, j = 0;
    unsigned s = 0;

    for (; i <= 1; i++)
        for (; j <= 1; j++)
            s++;

    printf("%u\n", s);
    return 0;
}

我希望看到4,但我看到了2。 我不明白为什么?

5 个答案:

答案 0 :(得分:10)

它在你的标题中:你没有在内部初始化j

所以序列将是:(i,j):

0,0
0,1
0,2 (inner for won't enter body)
1,2 (inner for won't enter body)
2,2 (outer for won't enter body)

在这种情况下,您应该逐步在每个变量值上书写并检查每个测试。下一步是学习如何使用调试器。它非常有帮助,可以让您免除很多麻烦。我无法强调调试器对您的生活有多么容易。

答案 1 :(得分:4)

第一个i循环,j从0开始,到2结束。第二个i次迭代,j仍为2,因此您不执行j循环。

答案 2 :(得分:0)

看看这里

firstly i=0;
then inner loop executes 2 times
for j=0 and j=1
now j becomes 2 and inner loop terminates
outer loop executes now for i = 1
but your inner loop has no initialisation so j would remain 2 and as a result inner loop never executs now aftet being executed for i=0

因此解决方案是将内循环改为

for( j=0;j<=1;j++);

它现在可以使用了。 Gud运气

答案 3 :(得分:0)

如果你没有在你的程序周围第二次初始化j,就不会执行内部的for-loop体。

和提示 - 明确您的代码。不仅是编译器“理解”你想要的东西,而且还有其他程序员阅读你的代码。 在这段代码中,很明显

unsigned i

实际上意味着

unsigned int i

但在另一个更大更复杂的代码中,它不会那么容易猜到。

答案 4 :(得分:0)

#include <stdio.h>
#include <conio.h>

int main()
{
   unsigned int i = 0, j = 0;
   unsigned int s = 0;

    for (; i <= 3; i++) //its supose to be 3 not 1 since its not going to add up to 4. 

    for (; j <= 3; j++)
        s++;

printf("%u\n", s);
getch();
return 0;

}

  

问题出现在循环n_n!