簡體   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