Công dụng: hàm in chuỗ is và thông báo lỗ

Một phần của tài liệu Bài giảng tin học đại cương (Trang 131 - 133)

/ b bằng 4 ,c bằng 4;

Công dụng: hàm in chuỗ is và thông báo lỗ

278.4.9. Hàm unlink: xóa tệp 8.4.9. Hàm unlink: xóa tệp

„ Dạng hàm: int unlink(const char *tên_tệp);„ Đối: là tên tệp cần xóa „ Đối: là tên tệp cần xóa

„ Công dụng: hàm dùngđểxóa 1 tệp trênđĩa. Nếu thành công, hàm cho giá trị0, trái đĩa. Nếu thành công, hàm cho giá trị0, trái lại hàm cho giá trịEOF.

288.4.10. Hàm remove: xóa tệp 8.4.10. Hàm remove: xóa tệp

„Dạng hàm: remove(const char *tên_tệp);„Đối: là tên tệp cần xóa. „Đối: là tên tệp cần xóa.

„Công dụng: hàm dùngđểxóa một tệp trênđĩa. Nó là hàm macro gọi tới unlink. đĩa. Nó là hàm macro gọi tới unlink.

298.4.11. Ví dụ: mở1 tệp và kiểm tra lỗi 8.4.11. Ví dụ: mở1 tệp và kiểm tra lỗi FILE *fp;

/*Mởtệp so_lieuđểđọc theo kiểu nhịphân. Nếu thành công, con trỏtệp so_lieu gán cho biến fp*/ fp = fopen("so_lieu","rb");

// Kiểm tra lỗi

if(fp==NULL) perror("Lỗi khi mởtệp so_lieu");

30

8.5. Nhập xuất ký tự

„ Dùngđược cảtrong kiểu nhịphân và văn bản nhưng tác dụng khác nhau.

„ 8.5.1. Hàm putc và fputc

„Dạng hàm:

int putc(int ch, FILE *fp); int fputc(int ch, FILE *fp);

„Đối: ch là một giá tịnguyên, fp là con trỏtệp. „Công dụng: hàm ghi lên tệp fp một ký tựcó mã bằng:

m = ch%256, trongđó chđược xem là sốnguyên không dấu. Nếu thành công hàm cho mã ký tựđược ghi, trái lại hàm cho EOF

31

8.5.1. Hàm putc và fputc (tiếp)

„ Ví dụ: câu lệnh putc(-1,fp); sẽghi lên tệpfp mã 255 vì dạng không dấu của -1 là fp mã 255 vì dạng không dấu của -1 là 65535.

„ Ghi chú:

„Hai hàm trên có ý nghĩa nhưnhau.

„Trong kiểu văn bản, nếu m =10 thì hàm sẽghi lên tệp hai mã 13 và 10. 32 8.5.2. Hàm getc và fgetc „ Dạng hàm: „ int getc(FILE *fp); „ int fgetc(FILE *fp); „ Đối: fp là con trỏtệp „ Công dụng: hàmđọc 1 ký tựtừtệp fp. Nếu thành công hàm cho mãđọcđược (có giá trịtừ0 đến 255). Nếu gặp cuối tệp hay có lỗi hàm cho EOF

„ Ghi chú:

„ hai hàm trên có ý nghĩa nhưnhau

„ trong kiểu văn bản, hàmđọc một lượt cảhai mã 13, 10 và trảvề

giá trị10; khi gặp mã 26 thì hàm không trảvề26 mà trảvềEOF

33

8.5.3. Ví dụ

„ Chương trình sao tệp chếđộnhịphân và dùng hàm fgetc, fputc #include"stdio.h" #include"stdlib.h" void main(){ int c; char t1[14], t2[14]; FILE *f1, *f2; if (adsbygoogle && !adsbygoogle.loaded) { (adsbygoogle = window.adsbygoogle || []).push({});}

printf("\nTỆP NGUỒN:"); gets(t1); printf("\nTỆP ĐÍCH:"); gets(t2); f1=fopen(t1,"rb"); if(f1==NULL){

printf("\nTỆP %s không tồn tại",t1); getch(); exit(1); } f2=fopen(t2,"wb"); while((c=fgetc(f1))!=EOF) fputc(c,f2); fclose(f1); fclose(f2); } 34 8.5.3. Ví dụ (tiếp)

„ Chương trình trên thực hiện sao tệp theo thuật toán sau:

„bước 1: đọc 1 ký tựcủa tệp f1, kết quảđặt vào biến c „bước 2: nếu c bằng EOF thì kết thúc; nếu c khác EOF

thì ghi c vào tệp f2 rồi quay trởlại bước 1.

„ Nhận xét 1: nếu trong chương trình trên, ta thay bằng kiểu văn bản thì chỉcác byte đứng trước mã 26 đầu tiên của tệp f1 được sao sang tệp f2.

„ Nhận xét 2: nếu dùng hàm feof và thuật toán:

„bước 1: nếu feof(f1) khác 0 thì kết thúc, trái lại chuyển xuống bước 2. „bước 2: đọc 1 ký tựtừtệp f1, ghi lên tệp f2 thì ta có đoạn chương trình: 35 8.5.3. Ví dụ (tiếp) while(!feof(f1)) fputc(fgetc(f1),f2);

„ Đoạn chương trình này lại chưa thậtđúng! Tệp f2 sẽdài hơn tệp f1 đúng một byte có giá trị255.

„ Lý do: giảsửtệp f1 cóđúng một ký tựmã 65, khiđó thuật toán sẽdiễn ra nhưsau:

„ bước 1: đầu từđang trỏvào ký tựA nên feof(f) = 0, chuyển xuống bước 2.

„ bước 2: đọc ký tựA của f1 và ghi lên f2, trởlại bước 1.

„ bước 1: đầuđọcđặtởcuối tệp f1 nhưng chưa có thao tácđọc nên feof(f1) vẫn bằng 0, chuyển xuống bước 2.

„ bước 2: đọc một ký tựcủa f1. Khiđó nhậnđược -1. Ghi -1 lên f2 thì mã 255 sẽđược ghi. Ngoài ra, do khiđọc từf1 gặp phải cuối tệp nên lúc này feof(f1) khác 0. Đếnđây thuật toán kết thúc.

368.6. Các hàm nhập xuất theo kiểu văn bản 8.6. Các hàm nhập xuất theo kiểu văn bản

„ 8.6.1. Hàm fprintf: ghi dữliệu theo khuôn dạng

„Dạng hàm:

int fprintf(FILE *f, const char *dk,...);

„Đối:

„ f là con trỏtệp

„ dk chứađịa chỉcủa chuỗiđiều khiển

„ ... là danh sách cácđối mà giá trịcủa chúng cần ghi lên tệp. „Công dụng: giá trịcácđốiđược ghi lên tệp f theo

khuôn dạng xácđịnh trong chuỗi dk. Nếu thành công hàm trảvềmột giá trịnguyên bằng sốbyte ghi lên tệp, nếu có lỗi thì trảvềEOF.

37Ví dụ hàm fprintf: Ví dụ hàm fprintf: #include<stdio.h> void main(){ FILE *f; int i; f=fopen("text","wt"); fprintf(f,"Cac dong"); for(i=1;i<=2;i++) fprintf(f,"\nDong%2d",i); fclose(f); } 38 Ví dụ hàm fprintf (tiếp):

„Chương trình trên sẽ tạo ra tệp văn bảntên là text gồm 3 dòng với nội dung như

Một phần của tài liệu Bài giảng tin học đại cương (Trang 131 - 133)