f là con trỏ trỏ đến tệp nhị phân DATA chứa không quá 100 bản ghi( kiểu cấu trúc) liền nhau. Cho khai báo. Đoạn chương trình nào sau đây
đọc toàn bộ các bảng ghi trong DATA vào x: struct T {…}; struct T x[100] int i = 0, n = 0;
đọc toàn bộ các bảng ghi trong DATA vào x: struct T {…}; struct T x[100] int i = 0, n = 0;
Trả lời:
Đáp án đúng: C
Phương án A:
- `fread(x+i++, sizeof(T), 1, f);` đọc một bản ghi từ tệp `f` vào vị trí `x+i` (tức là `x[i]`) và sau đó tăng `i` lên 1.
- `while (!feof(f))` lặp lại việc đọc cho đến khi gặp cuối tệp.
- `fclose(f);` đóng tệp.
Cách này có vẻ đúng, nhưng có một lỗi nhỏ: vòng lặp `while (!feof(f))` có thể đọc thêm một lần sau khi đã đến cuối tệp, vì `feof()` chỉ trả về true *sau khi* một thao tác đọc thất bại vì đã đến cuối tệp.
Phương án B:
- `fseek(f,0,SEEK_END);` di chuyển con trỏ tệp đến cuối tệp.
- `n=ftell(f)/sizeof(T);` tính số lượng bản ghi bằng cách lấy vị trí hiện tại của con trỏ tệp (tức là kích thước của tệp) chia cho kích thước của một bản ghi.
- `fseek(f,0,SEEK_SET);` di chuyển con trỏ tệp trở lại đầu tệp.
- `fread(x, sizeof(T), n, f);` đọc `n` bản ghi từ tệp vào mảng `x`.
- `fclose(f);` đóng tệp.
Cách này hiệu quả và chính xác hơn, vì nó xác định số lượng bản ghi trước khi đọc.
Do đó, phương án B đúng hơn phương án A. Vì A có thể đọc dư thừa 1 lần, nên A chưa chính xác hoàn toàn.
Vậy, D là đáp án đúng, vì A và B không hoàn toàn đúng.
Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.
50 câu hỏi 60 phút
Câu hỏi liên quan

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
