簡體   English   中英

如何在“ while(fscanf!= EOF){blah}”內確定下一個fscanf是否要返回EOF?

[英]How to determine, inside of “while(fscanf != EOF){blah}”, if the next fscanf is going to return EOF?

我在while(fscanf!= EOF)循環中執行了一些代碼。 但是,即使fscanf完成執行后,我也需要繼續運行該代碼,直到滿足某些條件為止。 我的意思是我想我可以將代碼復制/粘貼到while(fscanf)循環之外,並且僅使用全局變量,但這似乎很麻煩。 肯定有人曾經遇到過這樣的事情,並且擁有更干凈的解決方案。

您不能只修改while條件以解決這些附加條件嗎?

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

您不能-feof()函數僅讀取操作測試文件條件的結束 -無法測試下一個操作是否失敗。 您需要更改程序的邏輯,因為C流I / O不直接支持您的要求。

問題標題的答案是,這完全是不可能的。 想象一下,獲得一個隨機數並確定要傳遞給fscanf的兩種格式字符串中的哪一種。 您想要一個預先的預測,即使您不知道隨機數是多少,fscanf是否也會得到eof?

問題的答案或多或少是Andreas Brinck寫的。 我覺得您可能需要更多類似的東西:

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

更干凈的解決方案避免使用scanf / fscanf 一次讀取整行並使用sscanf解析該行的錯誤率要低得多。

來自comp.lang.c常見問題解答: 為什么每個人都說不要使用scanf? 我應該怎么用呢?

關於feof用法的條目也很重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM