2016-01-18 76 views
0

例如,如果文件中包含:如何在使用fgets()讀取一行後移回到前一行的開頭?

12345 
-3445654 
1245646 

我想讀的第一行到使用fgets()的字符串。然後我想在第二行中查看第一個位置是否有'-'。如果有的話,我會把第二行和strcat讀到第一行。

然後我想再次使用fgets()來讀取第三行。這次沒有'-'我只想讓文件回到第三行的開頭,這樣下一次我撥打fgets()時,它會再次讀取同一行的第三行。

有沒有一種方法可以做到這一點?

+1

C的IO機制被有意地稱爲「stream」IO。 – Olaf

+1

如果輸入如下所示('/''字符代表換行符):'12345/-3445654/-1245646',你會發生什麼?或者如果你讀的第一行以'' - ''開始? –

+0

你是否希望能夠在無法執行'seek()'操作的流上執行此操作? –

回答

1

使用fgetc讀取下一行的第一個字符,如果它不是' - '則使用ungetc將其放回。

+0

如果不是「 - 」,我在字符串的開頭尋找一個「\ t」標籤。一個ungetc也會把它放回原來的位置嗎?或者,因爲選項卡佔用了很多空間,所以我不得不多次取消選中。 – Brandon

+1

製表符只是一個字符。 – bruceg

+1

@Brandon:閱讀功能的manpages! 'ungetch'不保證不會超過單個字符。 – Olaf

1

通常,您只會將剛剛讀取的文件部分保留在內存中,直到您確定不再需要它爲止。或者您可以將整個文件讀入緩衝區,然後使用指針隨意跳轉。

或者如果您確實需要,您可以使用fseek更多的當前流位置,然後重新讀取您需要的零件。

0

每當我想

  1. 讀取一行
  2. 讀取第二線
  3. 也許做一些同時涉及第一線和第二線

我最常做的是申報第二行持有變量

char prevline[whateversize]; 

然後,冥冥中步驟1和2之間

strcpy(prevline, line); 

(當然你必須要確保lineprevline變量始終分配,例如作爲相同大小的數組,因此溢出不成問題。)

相關問題