当我在具有不同条件的for循环中使用两个变量时,我在i<3,j<2
下面使用了两个条件for循环总是执行,直到第二个条件失败。
#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)或&amp;&amp;(AND)。另一件事是我无法在for循环中初始化i和j,它向我显示错误,但是当我在C风格或外部变量中声明变量时工作正常for循环,为什么会这样?
我使用的编译器是Orwell Dev C ++ 提前谢谢。
答案 0 :(得分:7)
for(i=0,j=0;i<3,j<2;i++,j++)
相当于
for(i=0,j=0;j<2;i++,j++)
逗号表达式采用最后一个表达式的值。
无论哪个条件是第一个,都将被忽略,第二个条件将仅被使用。
答案 1 :(得分: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
将执行:
在你的情况下:i<3,j<2
你 比较i<3
,你只是忽略了这种比较的结果。
当指令有一些副作用时,逗号表达式很有用,而不仅仅是返回一个值。常见的情况是:变量递增/递减或赋值运算符。
LOOP_EXPRESSION
是任何单表达式,无需评估任何内容。在这里,您再次使用逗号表达式,忽略左侧的结果。但是,在这种情况下,您还没有使用结果,只是使用++副作用 - 这是增加变量的值。
BODY_BLOCK
是单个语句或块,用大括号封装。
以上for
可与以下内容进行比较:
{
START_STATEMENT;
while(EXPRESSION) {
BODY_BLOCK;
LOOP_EXPRESSION;
}
}
答案 2 :(得分:-1)
c编译器总是使用第二个条件。
因此使用j <2。
将此用于循环
for(i=0,j=0;j<10;i++,j++)