繁体   English   中英

在C中循环以从文本文件中读取序列号

[英]For loop in C for reading number of sequence from text file

我在阅读有关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; 用于读取存储在文本文件中的数字序列。

提前致谢。

传统的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++)如果在其他地方声明了i则有效(也应定义...)
  7. for(;i<10;)仅停止条件,奇数,但有效
  8. 如果i在其他地方声明,则for(;;i++)也有效,但这可能是无限循环

应该注意的另一件事:由于在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都将执行, 只有j < 5会被评估,这意味着循环停止条件是j < 5 i < 1写在那里,但这不会使循环停止
  3. i++, j++与1相同。两者都将执行。 没有相关评估

这是输出:

0       0
1       1
2       2
3       3
4       4

for (; count>0; count--, j++)意思是:

  • 什么都不做(; ;;
    通常在这里初始化循环控制变量,
    但是,如果已经完成,什么也不做就可以了
  • 开始循环
    • 如果count大于0,则count>0; ,然后做身体,
      否则身体之后继续
    • 然后递减计数并递增j count-- count--, j++)

由于他已经声明了要增加的变量,因此他不会在for循环中重新声明它。 他还在循环的每一圈更改两个变量,即递减计数和递增j。 sscanf定义(如果需要)。 他基本上读了一个文件。

让我们检查一下使您感到困惑的代码行。

for (; count>0; count--, j++){
    statement
}

count>0执行statement 它屡做count--, j++哪里,逗号运算符 该运算符执行以下操作:

expression1, expression2

计算expression1 ,然后计算expression2并返回expression2的值作为整个表达式的值。

由于此处未使用count--,j--的值,因此只在做count--然后是j--

for loop的每个参数都是可选的,因此,即使for(;;)也有效,并且等效于while(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM