我正在阅读C中的循环,我发现了一行有趣的代码,我无法理解。如果有人能解释我这行,我将不胜感激:
for (; count>0; count--, j++)
但是整个代码是这样的:
while(getline(&line, &count, input) != -1)
{
for ( ; count>0; count--, j++)
sscanf(line, "%d", &array[i]);
i++;
}
变量count
为size_t
类型,int i,j = 0
和FILE *input;
,用于读取存储在文本文件中的数字序列。
提前致谢。
答案 0 :(得分:5)
虽然传统的for
循环看起来像for(i = 0; i < N; i++)
,但这也是一种有效的使用方法。
for(;;)
也有效)。count>0;
)是您所期望的停止条件count--, j++
for
循环可以与0,1或2个 parts 一起使用,这意味着所有这些选项都可以:
for(;;)
for(int i;;)
仅声明。有点奇怪,但有效for(int i=0; i < 10;)
也有效,但这可能是一个无限循环for(int i=0; ; i++)
也有效,但这可能是一个无限循环,因为没有停止条件(循环中的break
可以处理这个)for(int i=0;i<10;i++)
传统for(;i<10;i++)
如果i
在其他地方宣布有效,则有效(也应定义......)for(;i<10;)
只停止条件,奇怪但有效for(;;i++)
如果i
在其他地方宣布,也有效,但这可能是一个无限循环另一件需要注意的事情是:因为for循环的每个部分都可以使用任意数量的语句,所以你可以这样:
for (int i = 0, j = 0; i < 1, j < 5; i++, j++)
printf("%d\t%d\n", i, j);
请注意,使用,
非常棘手。它将执行每个语句,但只评估最后一个语句,这意味着在循环的3个部分中的每个部分:
int i = 0, j = 0;
都会执行。没有评估相关i < 1, j < 5
两者都将执行 BUT 将仅评估j < 5
,这意味着,循环停止条件为j < 5
。 i < 1
写在那里,但这不会使循环停止i++, j++
与1.相同。两者都将执行。没有评估相关这是输出:
0 0
1 1
2 2
3 3
4 4
答案 1 :(得分:2)
for (; count>0; count--, j++)
表示:
(;
; count>0;
,则执行body,count--, j++)
答案 2 :(得分:0)
由于他已经宣布了他希望增加的变量,因此他不会在for循环中重新声明它。他还在循环的每个回合处更改了两个变量,他递减计数并递增j。 sscanf definition如果您需要的话。他基本上读了一个文件。
答案 3 :(得分:0)
让我们检查让您感到困惑的代码行。
for (; count>0; count--, j++){
statement
}
在statement
时执行count>0
。它重复count--, j++
,其中,
是逗号运算符。该运算符执行以下操作:
expression1, expression2
评估expression1
,然后评估expression2
并返回expression2
的值作为整个表达式的值。
由于此处未使用count--,j--
的值,因此只需执行count--
后跟j--
。
for
- 循环的每个参数都是可选的,因此即使for(;;)
有效且等同于while(1)
。