Nếu với trường hợp thứ nhất mà ta lại dùngđoạn mã cho trường hợp thứ hai thì

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

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

Nếu với trường hợp thứ nhất mà ta lại dùngđoạn mã cho trường hợp thứ hai thì

sao?

„Kết quả:

Mất số34 cuối cùng

478.6.3. Hàm fputs: ghi một chuỗi ký tựlên tệp 8.6.3. Hàm fputs: ghi một chuỗi ký tựlên tệp

„ Dạng hàm:

„int fputs(const char *s, FILE *f); „ Đối:

„s là con trỏtrỏtớiđịa chỉđầu của một chuỗi ký tựkết thúc bằng dấu '\0'.

„f là con trỏtệp.

„ Công dụng: ghi chuỗi s lên tệp f (dấu '\0' không ghi lên tệp). Nếu thành công hàm trảvềký tự

cuối cùngđược ghi lên tệp; nếu có lỗi hàm trảvề

EOF.

48

Ví dụ hàm fputs

„ Chương trình sau sẽnhập các dòng ký tựtừbàn phím và ghi lên tệp "vanban" #include<stdio.h>

#include<conio.h> void main(){

int i=0; char d[256]; FILE *f; f=fopen("vanban","w"); clrscr();

printf("Bam Enter de ket thuc"); while(1){

i++;

printf("\nDong %d: ",i); gets(d); if(d[0]=='\0') break; // Bấm Enter đểkết thúc if(i>1) fputc(10,f); fputs(d,f); } fclose(f); } Tệp vanban

498.6.4. Hàm fgets: đọc một dãy ký tựtừtệp 8.6.4. Hàm fgets: đọc một dãy ký tựtừtệp

„ Dạng hàm:

„ char *fgets(char *s, int n, FILE *f);

„ Đối:

„ s là con trỏtrỏtới vùng nhớđủlớnđểchứa chuỗi ký tựsẽđọc từtệp. „ n là sốnguyên xácđịnhđộdài cựcđại của dãy cầnđọc.

„ f là con trỏtệp.

„ Công dụng: đọc 1 dãy ký tựtừtệp f chứa vào vùng nhớs. Việcđọc kết thúc khi:

„ hoặcđãđọc n-1 ký tự

„ hoặc gặp dấu xuống dòng (cặp mã 13 10). Khiđó mã 10 đượcđưa vào xâu kết quả.

„ hoặc kết thúc tệp.

„ Xâu kết quảsẽđược bổsung thêm dấu hiệu kết thúc chuỗi '\0'. Khi thành công hàm trảvềđịa chỉvùng nhận kết quả; khi có lỗi hoặc gặp cuối tệp, hàm cho giá trịNULL.

50 (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ hàm fgets

„ Chương trìnhđọc các dòng ký tựtrên tệp "vanban" vàđưa ra màn hình.

#include<stdio.h> #include<conio.h> void main(){

int i=0; char d[256]; FILE *f; f=fopen("vanban","r"); clrscr(); while(!feof(f)){ i++; fgets(d,256,f); printf("Dong %d: %s\n",i,d); } fclose(f); getch(); } Kết quả hiển thị 51 8.7. Tệp văn bản và các thiết bịchuẩn „ Có thểdùng các hàm nhập xuất văn bản trên các

thiết bịchuẩn. C đãđịnh nghĩa các tệp tin và con trỏtệpứng với các thiết bịchuẩn nhưsau:

Thiết bịin chuẩn (máy in) stdprn prn Thiết bịlỗi chuẩn (màn hình) stderr err Thiết bịra chuẩn (màn hình) stdout out

Thiết bịvào chuẩn (bàn phím) stdin in Thiết bị Con trỏ Tệp „ Khi chương trình C bắt đầu làm việc thì các tệp này được tựđộng mở, vì vậy có thểdùng các con trỏ nêu trên đểnhập xuất trên các thiết bị

chuẩn 52

8.7. .... ví dụ

#include<stdio.h> #include<conio.h> void main(){

char ht[25]; float diem; int ns; printf("\nHo ten: ");fgets(ht,25,stdin); printf("\nDiem va nam sinh"); fscanf(stdin,"%f%d",&diem,&ns); fputs(ht,stderr);

fprintf(stdout,"Diem %f nam sinh %d",diem, ns); }

538.8. Các hàm nhập xuất theo kiểu nhịphân 8.8. Các hàm nhập xuất theo kiểu nhịphân „ 8.8.1. Hàm putw: ghi một sốnguyên

„Dạng hàm: int putw(int n, FILE *f);

„Đối:

„n là giá trịnguyên „f là con trỏtệp

„Công dụng: ghi giá trịn lên tệp f dưới dạng 2 byte. Nếu thành công hàm trảvềsốnguyên

được ghi; nếu có lỗi hàm trảvềEOF.

548.8.2. Hàm getw: đọc một sốnguyên 8.8.2. Hàm getw: đọc một sốnguyên „Dạng hàm: int getw(FILE * f);

„Đối: f là con trỏtệp.

„Công dụng: đọc một sốnguyên 2 byte từtệp f. Nếu thành công, hàm trảvềsố tệp f. Nếu thành công, hàm trảvềsố nguyênđọcđược; nếu có lỗi hoặc gặp cuối tệp, hàm trảvềEOF.

55

Ví dụ về hàm putw và getw

„ Chương trình ghi một dãy sốnguyên lên tệp "songuyen", sauđóđọc các sốnguyên từtệp này vàđưa ra màn hình.

#include<stdio.h> #include<conio.h> void main(){ FILE *f; int i; // Ghi các sốnguyên f=fopen("songuyen","wb"); for(i=1000;i<=1010;i++) putw(i,f); fclose(f); // Đọc các sốnguyên clrscr(); f=fopen("songuyen",rb"); while((i=getw(f)!=EOF) printf("\n%d",i); fclose(f); } 56 8.8.3. Hàm fwrite: ghi các mẫu tin lên tệp „ Dạng hàm:

„int fwrite(void *ptr, int size, int n, FILE *f); „ Đối:

„ptr là con trỏtrỏtới vùng nhớchứa dữliệu cần ghi. „size là kích thước của mẫu tin theo byte.

„n là sốmẫu tin cần ghi. „f là con trỏtệp.

„ Công dụng: ghi n mẫu tin kích thước size byte từ

vùng nhớptr lên tệp f. Hàm trảvềgiá trịbằng số (adsbygoogle = window.adsbygoogle || []).push({});

mẫu tin thực sựđược ghi.

578.8.4. Hàm fread: đọc các mẫu tin từtệp tin 8.8.4. Hàm fread: đọc các mẫu tin từtệp tin

„ Dạng hàm:

„int fread(void *ptr, int size, int n, FILE *f); „ Đối:

„ptr là con trỏtrỏtới vùng nhớsẽchứa dữliệuđọc được từtệp tin.

„size là kích thước của mẫu tin theo byte. „n là sốmẫu tin cầnđọc.

„f là con trỏtệp.

„ Công dụng: đọc n mẫu tin kích thước size byte từ

tệp f chứa vào vùng nhớptr. Hàm trảvềmột giá trịbằng sốmẫu tin thực sựđọcđược.

58

Ví dụ về fwrite, fread

„ Ví dụ1: sao chép tệp dùng fwrite, fread #include<stdio.h>

#include<process.h> void main(){

int n; char t1[20], t2[20], c[1000]; FILE *f1, *f2;

printf("\nTEP NGUON: ");gets(t1); printf("\nTEP DICH");gets(t2); f1=fopen(t1,"rb"); if(f1==NULL){

printf("\nTEP %s khong ton tai",t1); getch(); exit(1); } f2=fopen(t2,"wb"); while((n=fread(c,1,1000,f1))>0) fwrite(c,1,n,f2); fclose(f1); fclose(f2); } 59 Ví dụ về fwrite, fread „ Ví dụ2: ghi vàđọc một dãy n phần tửsốthực #include<stdio.h> #include<conio.h> void main(){

FILE *f; float a[20],b[20]; int i,n; // Nhập sốphần tửn

do{

printf("Nhap so phan tu n= ");scanf("%d",&n); }while((n<1)||(n>20));

// Nhập vào n phần tửthực for(i=0;i<n;i++){

printf("\na[%d]= ",i); scanf("%f",&a[i]); }

60

Ví dụ về fwrite, fread

f=fopen("mangsolieu","wb");

// Ghi n phần tửthực của mảng a vào file f fwrite(a,sizeof(float),n,f);

fclose(f);

f=fopen("mangsolieu","rb");

// Đọc n phần tửthực từfile f đưa vào mảng b fread(b,sizeof(float),n,f); // Hiển thịra màn hình for(i=0;i<n;i++) printf("\nb[%d]=%f",i,b[i]); fclose(f); getch(); }

61Ví dụ về fwrite, fread Ví dụ về fwrite, fread „ Ví dụ3: ghi vàđọc cấu trúc #include<stdio.h> #include<conio.h> typedef struct{ char ht[25]; float diem; }HOCSINH; void main(){ FILE *f; HOCSINH hs; // Nhập sốliệu từbàn phím và ghi lên tệp f=fopen("HOSO.DAT","wb"); printf("Bấm Enter đểkết thúc"); while(1){ 62 Ví dụ về fwrite, fread

printf("\nHo va ten: ");gets(hs.ht); if(hs.ht[0]=='\0') break; (adsbygoogle = window.adsbygoogle || []).push({});

printf("\nDiem so: ");scanf("%f%*c",&hs.diem); fwrite(&hs,sizeof(HOCSINH),1,f); } fclose(f); f=fopen("HOSO.DAT","rb"); while(fread(&hs,sizeof(HOCSINH),1,f)>0) printf("\n%s %f",hs.ht,hs.diem); fclose(f); getch(); } 63 8.9. Nhập xuất ngẫu nhiên và các hàm di chuyển con trỏchỉvị

„ Mỗi tệp khiđang mởcó một con trỏchỉvịdùng

đểxácđịnh vịtríđọc/ghi trên tệp.

„ Khi mởtệp tin đểđọc/ghi, con trỏchỉvịluônở đầu tệp tin. Nhưng nếu mởtheo chếđộ"a" thì con trỏchỉvị ởcuối tệpđểghi thêm dữliệu vào tệp.

„ Việc xuất nhập dữliệuđược thực hiện từvịtrí hiện tại của con trỏchỉvịvà sau khi hoàn thành thì con trỏnày dịch chuyểnđi một sốbyte bằng sốbyte đãđọc hay ghi.

„ Việc xuất nhậpđược tiến hành tuần tựtừđầu

đến cuối tệp tin.

648.9.1. Hàm rewind: chuyển con trỏchỉvị 8.9.1. Hàm rewind: chuyển con trỏchỉvị

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