2010-04-30 204 views
0

我有一段時間執行的代碼(fscanf!= EOF)循環。 但是,即使fscanf執行完畢,我仍需要繼續運行該代碼,直到滿足某些條件。 我的意思是我想我可以將代碼複製/粘貼到while(fscanf)循環之外,並且只使用全局變量,但似乎很麻煩。當然有人遇到過這樣的事情,並有一個更清潔的解決方案。如何確定,「while(fscanf!= EOF){blah}」中,如果下一個fscanf要返回EOF?

回答

5

難道你只是修改while條件來說明這些附加條件?

while(fscanf(...) != EOF || !(some_other_conditions_met)) 
+1

哈哈。天色已晚。 編輯:實際上,有一些代碼我不想在EOF達到時執行。 我想我必須把它分開。 – paIncrease 2010-04-30 09:28:00

1

你不能 - FEOF的()函數只針對文件條件一個讀操作後,終端的測試 - 沒有測試,如果接下來的操作將失敗的方式。您需要更改程序的邏輯,因爲C流I/O不直接支持您要求的內容。

1

您的問題的標題的答案是,它是相當不可能的。想象一下,獲得一個隨機數並決定將要傳遞給fscanf的兩個格式字符串中的哪一個。當你甚至不知道隨機數是什麼時,你是否需要預測fscanf是否會得到eof?

你的問題的答案或多或少是安德烈亞斯布林克寫的。我有一種感覺,你可能需要更多的東西像這雖然:

for (;;) 
{ 
    // ..... 
    eofReached = (fscanf(..) == EOF); 
    // ..... 
    if (eofReached && otherConditionsMet) break; 
    // ..... 
}