Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C while循环中的逗号运算符_C_Loops - Fatal编程技术网

C while循环中的逗号运算符

C while循环中的逗号运算符,c,loops,C,Loops,伙计们,当我参加一个在线C测试时,我在(s++,6)的时候遇到了一个语句while其中s初始化为零。我不知道当中间有一个逗号运算符时,while循环到底会做什么。当我在gcc编译器上运行它时,它没有输出。但是当我将while条件更改为while(1,s++)时,它将s值返回为1。谁能告诉我当时发生了什么。逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止 我怀疑在这种情况下,逗号是一个输入错误,他们的意思是输入一个小于的

伙计们,当我参加一个在线C测试时,我在(s++,6)的时候遇到了一个语句
while其中s初始化为零。我不知道当中间有一个逗号运算符时,while循环到底会做什么。当我在gcc编译器上运行它时,它没有输出。但是当我将while条件更改为
while(1,s++)
时,它将s值返回为1。谁能告诉我当时发生了什么。

逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止


我怀疑在这种情况下,逗号是一个输入错误,他们的意思是输入一个小于的。

逗号运算符计算左侧,然后丢弃结果。while条件对除零以外的任何值都保持循环。第一个将是一个无限循环;第二个将增加s,然后停止


我怀疑在这种情况下,逗号是一个打字错误,他们的意思是键入一个小于。

来自C11标准§6.5.17:

逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数;结果有其类型和值

这意味着
1,s++
计算
1
(因此不会发生任何事情),然后它计算
s++
,并仅返回该表达式的结果


所以这个表达式等价于
,而(s++)
。如果逗号表达式的左侧没有任何副作用(如在您的情况下),则可以将其删除。

来自C11标准§6.5.17:

逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数;结果有其类型和值

这意味着
1,s++
计算
1
(因此不会发生任何事情),然后它计算
s++
,并仅返回该表达式的结果


所以这个表达式等价于
,而(s++)
。如果逗号表达式的左侧没有任何副作用(如在您的情况下),则可以将其删除。

有关此代码如何产生的精彩猜测,请参见“1”;有关此代码如何产生的精彩猜测,请参见“1”