2012-02-24 60 views
10

Tôi đọc từ tập tin định dạngĐọc từ tập tin sử dụng fgets

1 32 43 23 
32 43 
123 43 54 243 
123 2222 
2 

đây là đoạn mã của tôi.

string[100]; 
while(!feof(fp)) 
fgets(string,100,fp) 

bây giờ khi tôi đặt mọi chuỗi, trong chuỗi cuối cùng, tôi nhận được sự lặp lại. và một số không rõ ràng hơn (giống như một cái gì đó khác cũng được in nói 123 hoặc hơn).

Cách giải quyết vấn đề này?

+0

Có một end-of-line '\ nhân vật n' vào cuối dòng cuối cùng trong tập tin của bạn? – dasblinkenlight

+2

Đăng mã thực sự đầy đủ của bạn, điều này thậm chí không nên biên dịch. – Staven

Trả lời

17

Bạn cần kiểm tra giá trị trả lại là fgets. Nếu một lần đọc đã thành công, fgets sẽ trả về con trỏ tới bộ đệm mà bạn đã chuyển đến bộ đệm (ví dụ: string trong ví dụ của bạn). Nếu gặp phải End-of-File và không có ký tự nào được đọc, fgets trả về NULL.

Hãy thử điều này:

char string[100]; 
while(fgets(string, 100, fp)) { 
    printf("%s\n", string); 
} 
+0

Tại sao bạn sẽ thử nghiệm với feof nếu fgets làm như vậy? –

+2

@ManuelReis Bạn đúng, 'feof' kiểm tra không cần thiết (đã chỉnh sửa). – dasblinkenlight

+1

Cảm ơn câu trả lời, tôi đã có một cuộc khủng hoảng tồn tại trong một giây. –

5

eof chỉ đạt được sau bạn đã cố gắng đọc từ tệp ở cuối tệp. Bạn phải sử dụng giá trị trả về của fgets thay vì (mà trả NULL trên eof hoặc sai sót và con trỏ nó được đưa ra cách khác):

char string[100]; 
while(fgets(string, 100, fp)) 
    // do stuff with string 

Kiểm tra giá trị trả về như thế này sẽ làm bạn không bao giờ nhấn eof bên trong cơ thể của vòng lặp, giống như cái khác, thay vì trong điều kiện.

Các vấn đề liên quan