2014-01-15 94 views
0

我有一個文本文件,它看起來像這樣:讀取和處理文本文件一行一行地用C

1;Einstein;Albert;3914-1948-4 
2;Newton;Isaac;1941-5525-2 
... 

像這樣

typedef struct { 
int Nr; 
char FName[30]; 
char LName[30]; 
char ID[12]; 
} student; 

一個結構我有一個功能,需要一個字符串的結構類似於上面的文件中的一行和結構,並將該行中的數據保存在結構中。

現在我必須從文件中讀取一行,使用我的函數處理它並轉到下一行。

我會做一個循環,將跳線,併爲每一行創建一個新的變量類型的學生。

但我不知道該怎麼做。 fgets只允許你閱讀一行,但我沒有看到跳轉到下一行的方法。

有沒有辦法做到這一點不是太複雜?

+1

每次調用'與fgets()'返回_one_線。要閱讀下一行,請再次調用'fgets()'。 – chux

回答

1

每次調用fgets都會返回一個新行,直到EOF(即「文件結束」)。

參見:fgets

對於使用fgets讀取環路的裸輪廓示例,請參見:

fgets - get a string from a stream

不過,如果你不能確定足夠長的時間分配緩衝區保持一條線,通常最好使用fgetc來逐個讀取每個字符 - 不必擔心,文件I/O仍然被緩衝,不會一次讀取字符 - 並將文本組裝爲標記爲你會走,而不是處理比任何緩衝區更長的線如果您提供了這些內容,那麼您可能需要處理在一個已填充緩衝區和下一個緩衝區之間分割的令牌。

+0

,但它表示:「讀取在EOF或換行符後停止,如果讀取了換行符,則將其存儲到緩衝區中,終止空字節(aq \ 0aq)存儲在緩衝區中的最後一個字符之後。所以它會停止閱讀第一行後 – user3004619

+0

那麼,EOF沒有問題,你就完成了。但是在換行符的情況下,下一次調用'fgets'將讀取換行符之後的字符 - 即下一行。 – Ned

+1

@ user3004619這是一個電話..如果你再次調用它,你會得到另一個線,依此類推,直到EOF – pinkpanther

1

你可以這樣做:

str char *str; 
    str = fgets(fptr); 
    while (str != EOF) 
    { 
     printf ("%s", str); 
     str = fgets(fptr); 
    } 
相關問題