Hàm fprintf() và fscanf()

Một phần của tài liệu Giáo trình môn ngôn ngữ lập trình c (Trang 269 - 274)

Phần II: Trong thời gian 30 phút kế tiếp

Bài 21: Quản lý tập tin

21.5 Các hàm xử lý tập tin

21.5.8 Hàm fprintf() và fscanf()

Ngoài các hàm nhập xuất đã được thảo luận, hệ thống nhập/xuất có vùng đệm còn bao gồm các hàm fprintf()fscanf(). Các hàm này tương tự như hàm printf()scanf() ngoại trừ rằng chúng thao tác trên tập tin. Nguyên mẫu của hàm fprintf()fscanf() là:

int fprintf(FILE * fp, const char *control_string,..);

int fscanf(FILE *fp, const char *control_string,...);

trong đó fp là con trỏ tập tin trả về bởi lời gọi hàm fopen(). Hàm fprintf()fscanf() định hướng các thao tác nhập xuất của chúng đến tập tin được trỏ bởi fp. Đoạn chương trình sau đây đọc một chuỗi và một số nguyên từ bàn phím, ghi chúng vào một tập tin trên đĩa, và sau đó đọc thông tin và hiển thị trên màn hình.

. .

printf("Enter a string and a number: ");

fscanf(stdin, "%s %d", str, &no);

/* read from the keyboard */

fprintf(fp, "%s %d", str, no);

/* write to the file*/

fclose (fp);

. .

fscanf(fp, "%s %d", str, &no) /* read from file */

fprintf(stdout, "%s %d", str, no) /* print on screen */

. .

Nên nhớ rằng, mặc dù fprintf()fscanf() thường là cách dễ nhất để ghi vào và đọc dữ liệu hỗn hợp ra các tập tin trên đĩa, nhưng chúng không phải luôn luôn là hiệu quả nhất. Nguyên nhân là mỗi lời gọi phải mất thêm một khoảng thời gian, vì dữ liệu được ghi theo dạng ASCII có định dạng (như nó sẽ xuất hiện trên màn hình) chứ không phải theo định dạng nhị phân. Vì vậy, nếu tốc độ và độ lớn của tập tin là đáng ngại, fread()fwrite() sẽ là lựa chọn tốt hơn.

Tóm tắt

 Ngôn ngữ C không chứa bất kỳ câu lệnh nhập/xuất nào tường minh. Tất cả các thao tác nhập/xuất được thực hiện bằng cách sử dụng các hàm trong thư viện chuẩn của C.

 Có hai kiểu stream – stream văn bản và stream nhị phân.

 Một stream văn bản là một chuỗi các ký tự.

 Một stream nhị phân là một chuỗi các byte.

 Một tập tin có thể là bất cứ gì từ một tập tin trên đĩa đến một thiết bị đầu cuối hay một máy in.

 Một con trỏ tập tin là một con trỏ trỏ đến cấu trúc, trong đó chứa các thông tin về tập tin, bao gồm tên, vị trí hiện hành của tập tin, tập tin đang được đọc hoặc ghi, và có lỗi xuất hiện hay đã đến cuối tập tin.

 Hàm fopen() mở một stream để dùng và liên kết một tập tin với stream đó.

 Hàm fclose() đóng một stream đã được mở bằng hàm fopen().

 Hàm fcloseall() có thể được sử dụng khi cần đóng nhiều stream đang mở cùng một lúc.

 Hàm fputc() được dùng để ghi ký tự, và hàm fgetc() được dùng để đọc ký tự từ một tập tin đang mở.

 Hàm fgets()fputs() thao tác giống như hàm fgetc() và fputc(), ngoại trừ rằng chúng làm việc trên chuỗi.

 Hàm feof() được dùng để chỉ ra cuối tập tin khi tập tin được mở cho các thao tác nhị phân.

 Hàm rewind() đặt lại vị trí của con trỏ định vị trí về đầu tập tin.

 Hàm ferror() xác định liệu một thao tác trên tập tin có sinh lỗi hay không.

 Hàm remove() xóa một tập tin đã cho.

 Hàm fflush() làm sạch và chép các buffer ra ngoài. Nếu một tập tin được mở để đọc, thì vùng đệm nhập của nó sẽ trống, trong khi một tập tin được mở để ghi thì vùng đệm xuất của nó được ghi vào tập tin.

 Hàm fseek() có thể được sử dụng để đặt lại vị trí của con trỏ định vị bên trong tập tin.

 Các hàm thư viên fread()fwrite() được dùng để đọc và ghi toàn bộ khối dữ liệu vào tập tin.

 Hệ thống nhập xuất có vùng đệm cũng bao gồm hai hàm fprintf()fscanf(), hai hàm này tương tự như hàm printf()scanf(), ngoại trừ chúng thao tác trên tập tin.

300 Lập trình cơ bản C

Kiểm tra tiến độ học tập

1. Có hai kiểu stream là stream __________ và stream _________.

2. Các tập tin đang mở được đóng lại khi chương trình bị treo hay kết thúc bất thường.

(Đúng /Sai)

3. Hàm _________ mở một stream để dùng và liên kết một tập tin với stream đó.

4. Hàm được dùng để ghi ký tự vào tập tin là ________.

5. Hàm fgets() xem ký tự sang dòng mới như là một phần của chuỗi. (Đúng / Sai) 6. Hàm ________ đặt lại vị trí của con trỏ định vị bên trong tập tin về đầu tập tin.

7. Mỗi khi một ký tự được đọc hay ghi từ một stream, ___________ được tăng lên.

8. Các tập tin mà trên đó hàm fread() và fwrite() thao tác thì phải được mở ở chế độ ________.

9. Vị trí hiện hành của con trỏ kích hoạt hiện hành có thể được tìm thấy bằng sự trợ giúp của hàm ________.

Bài tập tự làm

1. Viết một chương trình để nhập dữ liệu vào một tập tin và in nó theo thứ tự ngược lại.

2. Viết một chương trình để truyền dữ liệu từ một tập tin này sang một tập tin khác, loại bỏ tất cả các nguyên âm (a, e, i, o, u). Loại bỏ các nguyên âm ở dạng chữ hoa lẫn chữ thường. Hiển thị nội dung của tập tin mới.

302 Lập trình cơ bản C

Quản lý tập tin 305

Một phần của tài liệu Giáo trình môn ngôn ngữ lập trình c (Trang 269 - 274)

Tải bản đầy đủ (PDF)

(284 trang)