我对C
很新,请原谅我,如果低于q。已被问到,
我看了一个c程序如下:
#include <stdio.h>
main() {
int i;
for (i=1;i<=5;printf("%d\n",i))
i++;
}
我的输出为:
2
3
4
5
6
但我不明白为什么? 很抱歉给您带来不便。意外放置for循环后面的分号。 但我认为输出应该是1,2,3,4,5,因为printf语句是在增量运算符之前。
答案 0 :(得分:2)
你的循环是无限的,因为你永远不会制造阻止它的东西!所以它只是继续打印1!
for (i=1;i<=5;printf("%d\n",i));
//^And your loop ends here
修改强>
如果你没有分号那么输出就是因为for循环的方式有效!
1 2, 5 4
| | |
\/ \/ \/
for(i = 0; i <= 5 ; printf("%d\n",i)) {
//3 Go through the body
i++;
}
在5之后它进入2,3,4,5直到条件为假
答案 1 :(得分:1)
for (i=1;i<=5;printf("%d\n",i))
第3个表达式被评估为循环中的最后一个语句,因此在执行第一个printf()
时,i
的值为2
。
因此循环保持打印值直到i<=5
我希望循环结束时的;
是偶然的。因为结果不符合显示的循环。
for (i=1;i<=5;printf("%d\n",i));
这是一个无限循环,因为i
永远不会增加
答案 2 :(得分:1)
猜测循环后的分号是偶然的,for
循环由四部分组成:
初始化表达式(1)在循环之前完成。当条件(2)为真时,循环将循环。循环将在每次迭代时执行循环体(4),然后然后将执行迭代表达式(3)。
让我们进行for
循环:
for (i = 1; i <= 5; printf("%d\n", i))
{
i++;
}
这相当于
i = 1;
while (i <= 5)
{
i++;
printf("%d\n", i);
}
这应该可以很容易地看出你获得输出的原因。
答案 3 :(得分:0)
在你完成循环后,printf就会发生。
通常情况下,循环计数器会放在那里。
你可以这样看: for(i = 1; i&lt; = 5; printf(“%d \ n”,i ++));
或者你有一个不同的问题,除了它开始打印2?
答案 4 :(得分:0)
你只需要了解 for 循环是如何工作的。for循环的语法是
for ( 1.variable initialization ; 2.condition ; 4.variable update )
{
3.code //
}
因此,在第一次迭代的示例中, i 将取值1。之后将检查条件是否为真。是1小于5,因此代码将被执行。 i++
表示现在 i 为2.然后它将由printf()
函数打印。所以现在 i 是2,条件将被检查,是的再次为真所以循环将执行相同的步骤并将打印3,依此类推,直到条件为假。
你也有一个错字。其他用户提到的分号。
答案 5 :(得分:-1)
当你放一个;循环之后,像这样
for (something);
while (something);
这意味着您希望循环体执行 nothing 。
如果你写
for (something);
i++;
你的循环会运行,然后我会增加。一旦在循环之后,而不是每次。
我怀疑这是一个错字,因为你所描述的。
真正的问题是当你执行for(;;printf())
时,在循环体后执行。在循环体中你做我的++。
你在打印之前递增了我。
答案 6 :(得分:-2)
EIDT:我没有看到`for(i = 1; i&lt; = 5; printf(&#34;%d \ n&#34;,i));那个分号。
for(i = 1; i <= 5; printf(&#34;%d \ n&#34;,i)); 我++;
i=1
---你将1调整为i; i<=5
---而i == 5或i&lt; 5重复循环
printf("%d\n", i)
- 在屏幕i上打印,如果你写的话也一样
像这样的东西 - &gt;
for(i = 1; i <= 5;) { 的printf(&#34;%d \ n&#34;,i)的; 我++; }
因为for
的第三部分循环在循环的底部执行。
你也可以这样做:
for (i=1;i<=5;printf("%d\n",i), i++)
;