我最近开始学习C,我觉得这是一个不太聪明的问题,但是我想知道你是否可以采用2个变量,初始化它们,评估它们的条件并在1循环中递增它们
说我有2个整数:a和b我想初始化它们并增加它们。
for(a=1, b= 1; a < 10 , b < 6; a++, b++)
{
printf("a= %d\n", a);
printf("/tb= %d\n", b);
}
这有什么原因吗? 或者我只是做错了?
我看过this question,但在其中他/她只想增加2个变量,而我想为我的两个变量应用所有内容
答案 0 :(得分:3)
这有什么原因吗?或者我只是做错了?
它确实有效,但不是你预期的方式:
a < 10 , b < 6
评估a < 10
,然后评估b < 6
,但这是b < 6
返回的结果。所以你的循环只会转到5。
让我解释for循环是如何工作的:
您有三个“细分”,所有细分都是可选:
initialisation
此部分在循环开始之前运行一次。condition
此部分在每次迭代之前进行评估,如果此condition
评估为 false 则循环退出。increment
在每次次迭代后执行。for ( initialisation ; condition ; increment ) {
/* body of the for loop */
}
您可以使用while
循环实现相同的语义:
initialisation;
while (condition) {
/* body of the for loop */
increment;
}
例如:
for (;1;)
永远不会退出,for (;0;)
永远不会退出。
要实现所需的行为,您可以这样做:
//1-9, and values of "b" which are 1-5
int a, b;
for (a = 1, b = 1; a <= 9; ++a, (b <= 4 ? ++b : 0)) {
printf("a: %d\n", a);
printf("b: %d\n", b);
printf("\n");
}
但你最好还是在里面 for循环:
int a, b;
// This reads much better
for (a = 1, b = 1; a <= 9; ++a) {
printf("a: %d\n", a);
printf("b: %d\n", b);
printf("\n");
if (b <= 4) {
++b;
}
}
答案 1 :(得分:2)
这几乎可行,但是你的停止条件是错误的。它需要像a < 10 && b < 6
或类似的东西,具体取决于你想要的东西。
原因是comma operator的行为:只返回逗号的正确语句。因此,您的循环只会在b < 6
时停止,忽略您的a < 10
条件。循环的另外两个部分不依赖于返回的值,因此它们没有这个问题。