对于C中的循环,用于从文本文件中读取序列号

Nus*_*dim 1 c for-loop

我正在阅读C中的循环,我发现了一行有趣的代码,我无法理解.如果有人能解释我这行,我将不胜感激: for (; count>0; count--, j++)

但整个代码是这样的:

while(getline(&line, &count, input) != -1) 
{
  for ( ; count>0; count--, j++)
    sscanf(line, "%d", &array[i]);
  i++;
}
Run Code Online (Sandbox Code Playgroud)

变量countsize_t类型,int i,j = 0 以及FILE *input;用于读取存储在文本文件中的数字序列.

提前致谢.

CIs*_*ies 5

虽然传统for循环看起来像for(i = 0; i < N; i++)这也是使用它的有效方法.

  • 循环的第一部分是空的,因为它不需要(for(;;)也是有效的).
  • 第二部分(count>0;)是您所期望的停止条件
  • 第三部分是在每次迭代结束时所做的事情,在这种情况下 - 这是两件事(可以是0个命令,或任何其他数量的命令): count--, j++

一个for循环可以使用0,1或2个部件,这意味着所有这些选项都可以:

  1. for(;;)
  2. for(int i;;)只有声明.有点奇怪,但有效
  3. for(int i=0; i < 10;) 也有效,但这可能是一个无限循环
  4. for(int i=0; ; i++)也有效,但这可能是一个无限循环,因为没有停止条件存在(break循环内部可以处理这个)
  5. for(int i=0;i<10;i++) 传统
  6. for(;i<10;i++)有效if如果i在别处声明(也应该定义......)
  7. for(;i<10;) 只停止条件,奇怪,但有效
  8. for(;;i++)如果i在其他地方声明也有效,但这可能是一个无限循环

另一件需要注意的事情是:因为for循环的每个部分都可以使用任意数量的语句,所以可以使用以下内容:

    for (int i = 0, j = 0; i < 1, j < 5; i++, j++)
        printf("%d\t%d\n", i, j);
Run Code Online (Sandbox Code Playgroud)

请注意,使用,很棘手.它将执行每个语句但只评估最后一个语句,这意味着在循环的3个部分中的每个部分:

  1. int i = 0, j = 0;两者都会执行.没有评估相关
  2. TRICKY PARTi < 1, j < 5两者都将执行BUT只会j < 5被评估,这意味着,循环停止条件是j < 5.i < 1写在那里,但这不会使循环停止
  3. i++, j++两者都将执行.没有评估相关

这是输出:

0       0
1       1
2       2
3       3
4       4
Run Code Online (Sandbox Code Playgroud)