1. Trang chủ
  2. » Công Nghệ Thông Tin

Thư viện các hàm trong C ppt

57 935 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thư viện Các Hàm Trong C PPT
Tác giả Mr.Vũ Hiếu, Mr.Vũ Kim Hiếu
Trường học University of Information Technology, Vietnam
Chuyên ngành Computer Science
Thể loại Thư viện các hàm trong C
Định dạng
Số trang 57
Dung lượng 351,12 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nếu nó đến cuối tệp thì hàm trả về giá trị khác 0 , ngược lại trả về 0 int ferrorFILE *stream; Kiểm tra lỗi thao tác trên tệp.. Nếu việc mở tệp thành công hàm cho địa chỉ con trỏ tệp , t

Trang 2

void clearerr(FILE *stream);

Xoá tín hiệu lỗi gây ra bởi hệ thống khi thao tác trên tập tin gặp lỗi

Trang 3

/* mo tep tin de ghi */

/* xuat ra man hinh thong bao loi */

printf("Error reading from DUMMY.FIL\n");

/* xoa tin hieu loi */

int fclose(FILE *stream);

Đóng tệp lại sau khi thao tác , stream là tên con trỏ tệp Khi thành công hàm trả về 0 , trái lại trả về EOF ( hằng chỉ thị kết thúc tệp )

Trang 4

int feof(FILE *stream);

Hàm dùng để kiểm tra con trỏ tệp có đến cuối tệp hay chưa Nếu nó đến cuối tệp thì hàm trả về giá trị khác 0 , ngược lại trả về 0

int ferror(FILE *stream);

Kiểm tra lỗi thao tác trên tệp Hàm trả về giá trị khác 0 nếu có lỗi , ngược lại trả về 0

/* ghi loi ra man hinh*/

printf("Error reading from DUMMY.FIL\n");

Trang 5

/* xoa tin hieu loi*/

int fflush(FILE *stream);

Hàm dùng làm sạch vùng đệm của tệp Nếu thành công hàm cho giá trị 0 , trái lại hàm trả về EOF

/*ghi mot vai du lieu len tep */

fwrite(msg, strlen(msg), 1, stream);

Trang 6

int fgetc(FILE *stream);

Hàm dùng lấy 1 ký tự từ tệp do con trỏ tệp stream trỏ đến Nếu thành công hàm trả về mã ASCII của ký tự đọc được Nếu gặp lỗi hay gặp kết thúc tệp thì hàm trả về EOF

/* ghi len tep mot chuoi */

fwrite(string, strlen(string), 1, stream);

/* dat con tro tep len dau tep */

Trang 7

int fgetpos( FILE *stream,fpos_t *pos )

Hàm dùng lấy vị trí con trỏ tệp ( ở byte thứ mấy ) lưu vào trong biến pos Nếu thành công hàm trả về 0 , ngược lại hàm trả về giá trị khác 0

/* ghi du lieu len tep */

fprintf(stream, "This is a test");

/* in ra man hinh vi tri con tro hien thoi */

Trang 8

char *fgets(char *s,int n,FILE *fp);

Hàm dùng để đọc một chuỗi ký tự dài n-1 ký tự từ tệp fp vào chuỗi s Việc đọc kết thúc khi đã đọc đủ n-1 ký tự hay gặp dấu xuống dòng hay gặp kết thúc tệp Sau khi đọc , chuỗi s sẽ được

tự động thêm vào ký tự NULL vào cuối chuỗi Hàm trả về điạ chỉ chuỗi s nếu thành công , trái lại trả về NULL

/* ghi mot chuoi vao tep */

fwrite(string, strlen(string), 1, stream);

/* dat con tro tep len dau tep */

fseek(stream, 0, SEEK_SET);

/* doc mot chuoi tu tep */

fgets(msg, strlen(string)+1, stream);

/* in chuoi ra man hinh */

FILE *fopen(char *filename,char *type );

Hàm dùng để mở tệp Với filename là chuỗi chứa tên tệp cần mở ( bao gồm cả đường dẫn cụ thể ) Lưu ý một chút với filename này Nếu bạn nhập chuỗi từ bàn phím thì khác với bạn đánh sẵn nó trong code của bạn Ví dụ tệp ta cần mở tên là abc.jpg nằm ở ổ C Đối với đánh tên tệp

từ bàn phím thì ta đánh như sau : C:\abc.jpg Nhưng nếu ta soạn sẵn trong code thì ta soạn như sau : C:\\abc.jpg ( tức là thêm 1 gạch \ )

Kiểu mở tệp có rất nhiều cách nhưng chung quy ta có các trường hợp sau cho kiểu văn bản :

"r" : đọc

"w" : ghi

"r+" hay "w+" : đọc và ghi

"a" : ghi bổ sung

"a+" : đọc ghi bổ sung

Trang 9

Đối với mở file nhị phân bạn chỉ cần thêm chữ b vào sau các chuỗi trên

Nếu việc mở tệp thành công hàm cho địa chỉ con trỏ tệp , trái lại hàm trả về NULL

int fprintf(FILE *fp,char *s, );

Hàm này chức năng y chang như hàm printf nhưng thay vì ghi ra màn hình thì nó ghi lên tệp fp Nếu thành công hàm trả về số byte ghi được lên tệp , trái lại hàm trả về EOF

Trang 10

/* mo tep de doc ghi */

int fputc(int ch,FILE *fp);

Hàm ghi một ký tự có mã ASCII là ch lên tệp fp khi thành công trả về mã ASCII của

ký tự được ghi , trái lại hàm cho EOF

int fputs(char *s,FILE *fp);

Hàm ghi lên tệp fp chuỗi s Chú ý rằng chuỗi s nên kết thúc bằng ký tự NULL , nếu ko việc ghi lên có thể bị sai lệch Ký tự NULL này để chỉ ra vị trí kết thúc tệp cho rõ ràng chứ nó ko được ghi lên tệp Hàm trả về ký tự cuối cùng được ghi lên tệp nếu thành công , trái lại hàm cho EOF

Example

Code:

Trang 11

#include <stdio.h>

int main(void)

{

/* ghi mot chuoi ra dong xuat chuan ( man hinh ) */

fputs("Hello world\n", stdout);

int fread(void *ptr,int size,int n,FILE *fp);

Hàm đọc n mẫu tin , mỗi mẫu có kích thước size từ tệp fp lưu vào trong vùng nhớ ptr Hàm trả

về một giá trị bằng số mẫu tin thực sự đọc được Nếu gặp lỗi hay gặp kết thúc tệp hàm trả về 0

/* ghi du lieu len tep */

fwrite(msg, strlen(msg)+1, 1, stream);

/* dat con tro tep len dau tep */

fseek(stream, SEEK_SET, 0);

/* doc du lieu tu tep va xuat ra man hinh */

fread(buf, strlen(msg)+1, 1, stream);

printf("%s\n", buf);

fclose(stream);

return 0;

}

Trang 12

Hàm freopen

Khai báo :

Trích dẫn:

FILE *freopen(char *filename,char *type,FILE *fp);

Hàm này có chức năng gán con trỏ tệp fp vào tệp filename Sau đó có thể mở đọc ghi trên tệp này thông qua con trỏ tệp fp Hàm này đặc biệt có ích khi ta muốn gán các con trỏ tệp chuẩn ( stdin , stdout , stderr ) vào 1 tệp của ta Hàm trả về NULL nếu gặp lỗi

fprintf(stderr, "error redirecting stdout\n");

/* khi do cau lenh nay se khong con xuat ra man hinh nua ma xuat vao tep output.fil */

printf("This will go into a file.");

/*dong tep stdout lai */

int fscanf(FILE *fp,char *s, );

Hàm có chức năng đọc dữ liệu từ tệp Làm việc giống như hàm scanf nhưng thay vì đọc từ màn hình thì hàm fscanf đọc từ tệp thôi Hàm trả về 1 giá trị bằng số trường đọc được

Trang 13

int fseek(FILE *fp,long sb,int xp);

Hàm dùng di chuyển con trỏ tệp fp đến vị trí bất kỳ Với sb là số byte cần di chuyển , xp là vị trí xuất phát Nếu sb dương tức là di chuyển về cuối tệp , nếu âm thì di chuyển về đầu tệp Nếu xp

là 0 hay SEEK_SET tức là xuất phát từ đầu tệp , nếu là SEEK_CUR hay 1 tức là xuất phát tại vị trí hiện thời của con trỏ tệp , nếu là SEEK_END hay 2 tức là xuất phát tại cuối tệp

fprintf(stream, "This is a test");

printf("Filesize of MYFILE.TXT is %ld bytes\n",

Trang 14

Hàm fsetpos

Khai báo :

Trích dẫn:

int fsetpos(FILE *stream , fpos_t pos);

Hàm này thường đi kèm cùng hàm fgetpos Hàm dùng để di chuyển con trỏ tệp đến vị trí đươc lưu trong con trỏ pos Vị trí này do hàm fgetpos lưu lại từ trước Hàm trả về 0 nếu thành công , ngược lại trả về giá trị khác 0

/* ghi du lieu len tep */

fprintf(stream, "This is a test");

/* in ra man hinh vi tri con tro hien thoi */

Trang 15

Khi thành công hàm cho viết vị trí con trỏ tệp hiện thời đang ở vị trí thứ mấy ( tính từ đầu tệp ) ,

số hiệu của byte tính từ 0 Ngược lại hàm trả về -1L Nói thêm 1 tí về -1L có nghĩa là -1 mà lưu dưới dạng long ( dùng 4 byte để lưu )

fprintf(stream, "This is a test");

printf("The file pointer is at byte %ld\n",

int fwrite( void *ptr,int size,int n,FILE *fp );

Hàm dùng để ghi n mẫu tin kích thước size byte từ vùng nhớ ptr lên tệp fp Hàm trả về 1 giá trị bằng số mẫu tin thực sự đọc được

Trang 16

if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* mo tep TEST.$$$

2 String & Character

Danh sách các hàm với String & Character

Trang 18

#include <stdlib.h>

double atof( const char *str );

Chuỗi 'str' phải bắt đầu bằng kí tự số, nếu không sẽ bị lỗi chương trình (termination)

char *strB="17.3 thu xem dc khong?";

char *strC="Cai nay chac co loi 33.4";

double a, , ;

a = atof(strA);

b = atof(strB);

//c = atof(strC); < - Dong nay convert se bi loi

printf("\nGia tri cua chuoi %s sau khi convert la %.2f",strA, ); printf("\nGia tri cua chuoi %s sau khi convert la %.2f",strB, ); //printf("\nGia tri cua chuoi %s sau khi convert la %.2f",strC,c); < - bo comment ra se co loi

int atoi( const char *str );

'str' phải bắt đầu bằng số hoặc kí tự trắng <space> nếu không convert sẽ fail và trả về 0

Code minh họa

Trang 19

i = atoi( " 512 bottles of beer on the wall" );

printf("\nGia tri cua i la: %d", );

// Truong hop duoi day se in ra 0

printf("\nGia tri cua i la: %d", );

long atol( const char *str );

Tương tự như atoi()

printf("\nGia tri cua i la: %d", );

printf("\nGia tri cua i la: %d", );

// Truong hop duoi day se in ra 0

printf("\nGia tri cua i la: %d", );

int isalnum( int ch );

Kiểm tra một kí tự là số hay chữ cái

Trang 20

int main(void)

int isalpha( int ch );

Kiểm tra một kí tự có phải là chữ cái hay không

int iscntrl( int ch );

Kiểm tra một kí tự có thuộc nhóm kí tự điều khiển hay không

Nhóm kí tự điều khiển (Control Character) nằm từ : 0x00 đến 0x1F và kí tự 0x7F

Đúng thì trả về khác 0

Sai thì trả về 0

Trang 22

PHP Code:

#include <ctype.h>

int isdigit( int ch );

Kiểm tra 1 kí tự có phải là kí tự số hay không

int isgraph( int ch );

Bất cứ kí tự nào có thể in ra được (printable character) đều gọi là Graphical Character, ngoại trừ

Trang 23

Tên hàm: islower()

Định nghĩa

PHP Code:

#include <ctype.h>

int islower( int ch );

Kiểm tra một kí tự xem có phải chữ in thường không

int isprint( int ch );

Printable character bao gồm Graphical Character và kí tự trắng <space>

kiểm tra 1 kí tự có phải là printable character hay không

Trang 24

Tên hàm: ispunct()

Định nghĩa:

PHP Code:

#include <ctype.h>

int ispunct( int ch );

Punctuation Character là các kí tự trong nhóm Graphical Character nhưng không phải là chữ cái hay số

int isspace( int ch );

Space Character là những kí tự tạo nên khoảng trắng (line feed, form feed )

Trang 25

int isupper( int ch );

Kiểm tra một kí tự có phải chữ in Hoa hay không

int isxdigit( int ch );

Kiểm tra xem một kí tự có phải là số ở hệ thập lục (Hex - 16) hay không

Trang 26

Tên hàm: memchr()

Định nghĩa:

PHP Code:

#include <string.h>

void *memchr( const void *buffer, int ch, size_t count );

Tìm vị trí xuất hiện đầu tiên của kí tự 'ch' trong buffer của một chuỗi 'buffer' trong khoảng kí tự giới hạn 'count' cho trước

Nếu tìm thấy thì trả về vị trí kí tự xuất hiện trong chuỗi 'buffer'

Ngược lại NULL trả về

int memcmp( const void *buffer1, const void *buffer2, size_t count );

So sánh 'count' kí tự đầu tiên của 2 chuỗi buffer1 và buffer2

char buffer1[]="Xcross87 is a chick of programming";

char buffer2[]="Xcross87 is a crazy";

Trang 27

int compare_result = memcmp(buffer1,buffer2,strlen(buffer2));

void *memcpy( void *to, const void *from, size_t count );

Copy 'count' kí tự từ 'from' sang 'to'

memcpy(to,from,strlen(from)+1);

printf(" Gia tri cua \'to\' sau khi copy la: %s ",to);

void *memmove( void *to, const void *from, size_t count );

Giống hàm memcpy() nhưng xử lý được tình huống overlap với from và to

Chú ý: nên sử dụng memmove() thay vì sử dụng memcpy()

PHP Code:

Trang 28

memmove(to,from,strlen(from));

printf("\n Gia tri cua \'to\' sau khi move la: %s ",to);

void* memset( void* buffer, int ch, size_t count );

Lấp đầy 'count' bytes đầu tiên trong 'buffer' với kí tự 'ch'

Hàm chuyên sử dụng để lấp đầy hoặc khởi tạo memory block hay array, tốc độ xử lý tốt hơn vòng lặp

Trang 29

char *strchr( const char *str, int ch );

Hàm trả về giá trị chuỗi bắt đầu với 'ch' trong chuỗi 'str' Trả về NULL nếu không tìm thấy gì hết

ví dụ dưới đây sẽ cho ra kết quả là : 'ss87'

Trang 30

const char *str1="Xcross87 ";

const char *str2="Xcross";

char *strcpy( char *to, const char *from );

Copy từ chuỗi 'from' sang chuỗi 'to'

Chú ý: hàm dễ xảy ra buffer overflow

Trang 31

size_t strcspn( const char *str1, const char *str2 );

Trả về vị trí đầu tiên của bất cứ kí tự nào trong 'str1' tìm thấy trong 'str2'

Nếu không tìm thấy thì trả về độ dài chuỗi str1

int pos = strcspn(str,key);

printf("tim thay o vi tri %d",pos);

char *strerror( int num );

Lấy chuỗi error báo lỗi tương ứng của lỗi tìm được

Ví dụ dưới đây minh họa báo lỗi không tìm thấy file

Trang 32

size_t strlen( char *str );

Hàm trả về độ dài của chuỗi

const char *str="congdongcviet.com";

printf("do dai chuoi la: %d",strlen(str));

char *strncat( char *str1, const char *str2, size_t count );

Nối chuôi cơ ban như hàm strcat() nhưng chỉ định số byte của chuỗi str2 để nối vào str1

const char *str1="con ga";

const char *str2=" xcross87 is crazy";

char *result;

result = strncat(str1,str2, );

Trang 33

printf("Chuoi sau khi noi: %s",result);

int strncmp( const char *str1, const char *str2, size_t count );

Giống hàm strcmp() nhưng chỉ so sánh 'count' bytes cho trước

char *strncpy( char *to, const char *from, size_t count );

Copy từ from vào to với số byte quy định

char* strpbrk( const char* str1, const char* str2 );

trả về kí tự xuất hiện đầu tiên trong 'str1' xuất hiện trong 'str2'

Trả về NULL nếu không tìm thấy

const char *str1="con ga trong ko phai la con ga mai";

const char *str2="zzzzzzzzzzzza";

Trang 34

char* strpbrk( const char* str1, const char* str2 );

trả về kí tự xuất hiện đầu tiên trong 'str1' xuất hiện trong 'str2'

Trả về NULL nếu không tìm thấy

const char *str1="con ga trong ko phai la con ga mai";

const char *str2="zzzzzzzzzzzza";

char *strrchr( const char *str, int ch );

Trả về sự xuất hiện cuối cùng của kí tự 'ch' trong chuỗi 'str'

size_t strspn( const char *str1, const char *str2 );

trả về con trỏ tới vị trí đầu tiên của str2 trong str1 nếu tìm thấy

trả về NULL nếu không thấy

nếu độ dài của str2 là 0 thì trả về độ dài của str1

Trang 35

{

const char *str1="con ga trong ko phai la con ga mai";

const char *str2="la";

char* result;

result = strstr(str1,str2);

if(NULL != result) {

printf(" Doan tim thay: %s", result);

double strtod( const char *start, char **end );

start là chuỗi đầu vào của convert; end là phần còn lại của chuỗi sau khi convert

convert thành công thì trả về số double đã convert

result = strtod(start,&end);

printf("Sau khi convert: ");

printf("\n start = %s ",start);

printf("\n end = %s ",end);

printf("\n result = %lf",result);

Trang 36

#include <string.h>

char *strtok( char *str1, const char *str2 );

trả về chuỗi đầu tiên được cưa ra trong str1 theo khóa str2

nếu không tìm thấy thì trả về NULL

sau khi kết thúc toàn bộ token trong str1 thì str1=NULL

long strtol( const char *start, char **end, int base );

tương tự strtod() nhưng chuỗi vào start có base cho trước để convert sang

unsigned long strtoul( const char *start, char **end, int base );

giống như strtol() nhưng cho kiểu unsigned long

Trang 37

size_t strxfrm( char *str1, const char *str2, size_t num );

copy 'num' bytes từ str2 sang str1

int tolower( int ch );

convert sang kí tự thường

int toupper( int ch );

convert kí tự sang kí tự hoa

Trang 39

int abs( int num );

trả về giá trị tuyệt đối của 1 số

double acos( double arg );

trả về giá trị arc cosine của 'arg' trong khoảng [0,PI], arg nằm trong khoảng [-1,1] Nếu arg ngoài giới hạn cho phép thì acos() trả về giá trị NAN

double asin( double arg );

hàm trả về arc sine của arg

Trang 40

double atan( double arg );

Hàm trả về arc tangent của một số

double atan2( double y, double x );

trả về arc tangent của y/x

Ngày đăng: 02/04/2014, 06:20

TỪ KHÓA LIÊN QUAN

w