5

当我在具有不同条件的 for 循环中使用两个变量时,我在 for 循环下面使用的两个条件i<3,j<2总是执行,直到第二个条件失败。

#include<iostream>
#include<conio.h>
using namespace std ;
int main()
{
int i,j ;
for(i=0,j=0;i<3,j<2;i++,j++)
{
    cout<<"hello" ;
}
getch() ;
return 0 ;
} 

在该代码中,hello打印 2 次。为什么?

如果我使用i<3,j<10,“Hello”会打印 10 次。我不明白为什么第一个条件被忽略了。它是依赖于编译器还是其他?

如果我用 || 之类的条件替换,一切正常 (OR) 或 &&(AND)。另一件事是我无法在 for 循环本身中初始化 i 和 j,它向我显示一个错误,但是当我以 C 样式声明变量或在 for 循环之外声明一个变量时工作正常,为什么会这样?

我使用的编译器是 Orwell Dev C++。
提前致谢。

4

3 回答 3

7

for循环包括:

for(START_STATEMENT; CONDITION_EXPRESSION, LOOP_EXPRESSION) BODY_BLOCK

在哪里:

  • START_STATEMENT是任何单个语句,可能包括变量声明。如果你想声明2个变量,你可以写int i=0, j=0,但不是int i=0; int j=0因为后者实际上是2个语句。同样是节点,该变量声明是语句的一部分,但不能是 (sub)表达式的一部分。这就是为什么int i=0, int j=0也不正确的原因。

  • CONDITION_EXPRESSION是计算结果为布尔值的任何单个表达式。在您的情况下,您使用的是具有以下语义的逗号运算符A, B:会做:

    • 评估 A(它会评估,而不仅仅是忽略)
    • 放弃 A 的结果
    • 评估 B
    • 返回 B 作为结果

    在您的情况下:i<3,j<2正在比较i<3,您只是忽略了此比较的结果。

    当指令有一些副作用时,逗号表达式很有用,而不仅仅是返回一个值。常见情况是:变量递增/递减或赋值运算符。

  • LOOP_EXPRESSION是任何单个表达式,不必计算任何东西。在这里,您再次使用逗号表达式,忽略左侧的结果。但是,在这种情况下,您无论如何都不会使用结果,而只是使用 ++ 副作用 - 即增加变量的值。

  • BODY_BLOCK是单个语句或块,用花括号封装。

以上for可以类比:

{
    START_STATEMENT;
    while(EXPRESSION) {
        BODY_BLOCK;
        LOOP_EXPRESSION;
    }
}
于 2013-10-05T07:11:53.730 回答
7

for(i=0,j=0;i<3,j<2;i++,j++)

相当于

for(i=0,j=0;j<2;i++,j++)

逗号表达式采用最后一个表达式的值。

无论是第一个条件,都将被忽略,而仅使用第二个条件。

于 2013-10-05T05:47:38.867 回答
-1

c 编译器总是使用第二个条件。

因此使用 j<2。

使用这个 for 循环

      for(i=0,j=0;j<10;i++,j++)
于 2013-10-05T05:51:59.843 回答