我创建了一个 for 循环并遵循“,”和“;”这样的准则
for (i = 0, j = 0; i < 10, j < 10; i++, j++) {
//do something;
}
但是,在编译时我仍然收到警告说“逗号表达式的左操作数无效”。
我创建了一个 for 循环并遵循“,”和“;”这样的准则
for (i = 0, j = 0; i < 10, j < 10; i++, j++) {
//do something;
}
但是,在编译时我仍然收到警告说“逗号表达式的左操作数无效”。
i < 10, j < 10
是允许的,但可能不是预期的,因为它丢弃了第一个表达式的结果并仅返回 j < 10 的结果。逗号运算符计算逗号左边的表达式,丢弃它,然后计算右边的表达式并返回它。
(收集)https://stackoverflow.com/a/17638765/5610655
如果要测试多个条件,请改用逻辑 AND 运算符 &&。顺便说一句,逗号分隔的条件在我的 IDE 中运行良好。
之前也讨论过类似的概念。看一看。
C ++:for循环中的多个退出条件(多个变量):AND -ed或OR -ed?
for循环中是否允许多个条件?
这是一个实际的例子。如果你运行下面给出的代码,你会看到它的输出是 10 倍而不是 2 倍
#include <stdio.h>
void main()
{
int i,j;
for (i = 0, j = 0; i < 2, j < 10; i++, j++) {
printf("Hello, World!");
}
}
--output----
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
Hello, World!
如果您希望这两个条件都有效,请使用 AND(&&) 运算符而不是逗号分隔的条件。
#include <stdio.h>
void main()
{
int i,j;
for (i = 0, j = 0; i < 2 && j < 10; i++, j++) {
printf("Hello, World!\n");
}
}
---output--
Hello, World!
Hello, World!
没有必要使用 AND 分隔多个条件,一个 will 条件就足够了。只有迭代步数较少的条件才会被执行,循环会中断。
#include <stdio.h>
void main()
{
int i,j;
for (i = 0, j = 0; i < 2; i++, j++) {
printf("Hello, World!\n");
}
}
---output--
Hello, World!
Hello, World!
值的使用(i = 0, j = 0; i < 10, j < 10; i++, j++)是无用的,因为两者都i将j同时达到相同的值。除非其中一个值可能在 for 循环声明之外的时间发生变化,否则可以将其简化为(i = 0; i < 10; i++)
此外,正如其他人指出的那样,分隔比较的逗号(尽管有效)应替换为&&. 最后,循环应该是
for ( i = 0, j = 0; i < 10 && j < 10; i++, j++ )
或者
for ( i = 0; i < 10; i++ )
尽管您应该更喜欢后者,因为前者使用了不必要的代码。
正如评论所指出的那样解决了问题:在“”和“”之间必须使用“ ”而&&不是“ ”,i < 10j < 10
for (i = 0, j = 0; i < 10 && j < 10; i++, j++) {
//do something;
}