这是我编译和执行的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。 我不明白为什么?
答案 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!
中