Aru*_*run 5 c++ loops for-loop declaration
当我在具有不同条件的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 ;
}
Run Code Online (Sandbox Code Playgroud)
在该代码中,hello打印2次.为什么?
如果我使用i<3,j<10,"你好"打印10次.我无法理解为什么第一个条件被忽视了.是编译器依赖还是别的?
如果我用||这样的条件替换,那么每件事都能正常工作 (OR)或&&(AND).另一个原因是我无法在for循环中初始化i和j,它向我显示错误,但是当我在C风格中声明变量或在for循环外部声明一个变量时它工作正常,为什么会这样?
我使用的编译器是Orwell Dev C++.
提前致谢.
for(i=0,j=0;i<3,j<2;i++,j++)
相当于
for(i=0,j=0;j<2;i++,j++)
逗号表达式采用最后一个表达式的值.
无论哪个条件是第一个,都将被忽略,而第二个条件将仅被使用.
该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个语句.也是节点,变量声明是语句的一部分,但不能是(子)表达式的一部分.这就是为什么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;
}
}
Run Code Online (Sandbox Code Playgroud)