对于C中的循环,用于从文本文件

时间:2017-06-29 09:00:15

标签: 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++;
}

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

提前致谢。

4 个答案:

答案 0 :(得分:5)

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

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

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

  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++)如果i在其他地方宣布有效,则有效(也应定义......)
  7. for(;i<10;)只停止条件,奇怪但有效
  8. for(;;i++)如果i在其他地方宣布,也有效,但这可能是一个无限循环
  9. 另一件需要注意的事情是:因为for循环的每个部分都可以使用任意数量的语句,所以你可以这样:

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

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

    1. int i = 0, j = 0;都会执行。没有评估相关
    2. TRICKY PART i < 1, j < 5两者都将执行 BUT 将仅评估j < 5,这意味着,循环停止条件为j < 5i < 1写在那里,但这不会使循环停止
    3. i++, j++与1.相同。两者都将执行。没有评估相关
    4. 这是输出:

      0       0
      1       1
      2       2
      3       3
      4       4
      

答案 1 :(得分:2)

for (; count>0; count--, j++)表示:

  • 什么都不做(;;
    通常是循环控制变量初始化的地方,
    但如果已经完成,那么什么都不做
  • 开始循环
    • 如果count大于0,count>0;,则执行body,
      否则继续身体
    • 然后递减计数并递增j 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)