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

Sổ tay thư viện hàm ngôn ngữ lập trình C

121 744 5

Đ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

Định dạng
Số trang 121
Dung lượng 563,51 KB

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

Nội dung

Tài liệu được biên soạn rất chi tiết: khai báo hàm, tham số, cách sử dụng hàm và ví dụ minh họa. Bao gồm các thư viện: , , , , , , . Tài liệu rất có ích cho các bạn mới bắt đầu học lập trình C cũng như người đã đi làm. Tài liệu được tham khảo tại diễn đàn: http:vncoding.netforumshowthread.php?p=3202post3202

Trang 1

Title: Thư viện hàm ngôn ngữ lập trình C

Author: Vu Hong Viet

Date: 09/11/2014

Thư viện hàm ngôn ngữ lập trình C

<Tài liệu tham khảo từ diễn đàn: http://vncoding.net/forum/index.php)

Trang 2

- Nếu biểu thức đầu vào có giá trị là true (1), hàm assert() sẽ không làm gì

(chương trình vẫn thực hiện như bình thường)

- Định dạng của thông báo lỗi phụ thuộc ứng dụng gọi hàm assert( )

 Nếu là Console application thì thông báo lỗi sẽ được hiển thị lên màn hình console như khi chúng ta sử dụng lệnh printf( )

(Để xem thêm các bài tập C console application, bạn hãy truy cập link sau:

http://vncoding.net/forum/forumdisplay.php?f=20 gồm hơn 1000 bài tập lập trình C hữu ích cho bạn ôn luyện)

 Nếu là ứng dụng Win32 (ứng dụng có giao diện window), thì hàm assert( ) sẽ gọi hàm MessageBox( ) hiển thị 1 cửa sổ message box với button “OK” Nếu bạn click vào button “OK”, ứng dụng Win32 của bạn sẽ kết thúc ngay lập tức (Để xem them các bài tập lập trình Win32, bạn hãy truy cập link sau:

http://vncoding.net/forum/forumdisplay.php?f=2 , hy vọng sẽ giúp ích nhiều cho các bạn)

Ví dụ: Trong đoạn code dưới đây, hàm analyze_string( ) gọi hàm assert( ) để kiểm

tra các điều kiện của string đầu vào ( con trỏ NULL, string là rỗng, chiều dài string phải lớn hơn 2) Nếu 1 trong các điều kiện này trả về false, thì message lỗi tương ứng sẽ được chỉ ra

Trang 3

#include <stdio.h>

#include <conio.h>

#include <assert.h>

#include <string.h>

void analyze_string( char *string ); // Prototype

int main( void )

{

char test1[] = "abc", *test2 = NULL, test3[] = "";

printf ( "Analyzing string '%s'\n", test1 );

// Tests a string to see if it is NULL,

// empty, or longer than 0 characters

void analyze_string( char * string )

{

assert( string != NULL ); // Cannot be NULL

assert( *string != '\0' ); // Cannot be empty

assert( strlen( string ) > 2 ); // Length must exceed 2 }

Kết quả:

Analyzing string 'abc'

Analyzing string '(null)'

Analyzing string ''

Trang 4

Ví dụ:kiểm tra số nguyên c1 và c2 có phải là alphanumberic không?

Trang 5

int isalpha(int c);

Ví dụ: kiểm tra c1 = 48 (số 0 trong bảng mã ASCII), c2 = 97 (kí tự ‘a’)

Trang 6

int iscntrl(int c);

Ví dụ: kiểm tra c1 = 10 và c2 = 19 có phải là kí tự điều khiển không?

Trang 7

int isdigit(int c);

Trang 8

int isgraph(int c);

Ví dụ: kiểm tra c1 = 40 (kí tự @) và c2 = 7 (tiếng chuông) có phải là kí tự in được

Trang 9

int islower(int c);

int c1 = 97; // character 'a'

int c2 = 65; // character 'A'

Trang 10

int isupper(int c);

int c1 = 97; // character 'a'

int c2 = 65; // character 'A'

Trang 11

int isprint(int c);

int c1 = 32; // character space

int c2 = 69; // character 'E'

Trang 12

int ispunct(int c);

Parameter:

c : tham số đầu vào kiểu int

Remark:

Hàm ispunct( ) kiểm tra tham số c Nếu c là kí tự in được (từ 0x20 – 0x7E, ngoại trừ

kí tự space, chữ cái và chữ số), hàm sẽ trả về giá trị khác 0 Và nếu c không phải là

int c1 = 32; // character space

int c2 = 69; // character 'E'

c1 is NOT punctuation character

c2 is NOT punctuation character

Trang 13

int isspace(int c);

Ví dụ: kiểm tra c1 = 32 và c2 = 9 có phải là kí tự trắng không?

int c1 = 32; // character space

int c2 = 9; // horizontal tab

Trang 14

int isxdigit(int c);

Trang 15

int tolower(int c);

Parameter:

c : kí tự đầu vào để convert thành kí tự in thường

Remark:

Hàm tolower ( ) kiểm tra tham số c và convert kí tự c thành kí tự in thường Nếu c là

kí tự in hoa, hàm sẽ trả về kí tự in thường Để đảm bảo hàm tolower( ) trả về kết quả mong muốn, chúng ta cần dùng hàm isupper( ) để kiểm tra kí tự cần convert là kí tự

printf("\n%c is uppercase character", c);

printf("\n%c is converted into lowercase: %c",c,

Trang 16

int toupper( int c );

Parameter:

c : kí tự đầu vào để convert thành kí tự in hoa

Remark:

Hàm toupper ( ) kiểm tra tham số c và convert kí tự c thành kí tự in hoa Nếu c là kí

tự in thường, hàm sẽ trả về kí tự in hoa Để đảm bảo hàm toupper( ) trả về kết quả mong muốn, chúng ta cần dùng hàm islower( ) để kiểm tra kí tự cần convert là kí tự

printf("\n%c is lowercase character", c);

printf("\n%c is converted into uppercase: %c",c,

Trang 17

Hàm exp( ) sẽ trả về giá trị e mũ x, nếu thành công

- Nếu tràn trên (overflow), hàm sẽ trả về INF

- Nếu tràn dưới (underflow), hàm sẽ trả về 0

Trang 18

double log(double x);

double log10(double x);

Parameter:

x: giá trị double

Remark:

Hàm log( ) tính logarit giá trị x

- Hàm log( ) sẽ trả về giá trị logarit cơ số e (ln(x)) của x, nếu thành công

- Hàm log10( ) sẽ trả về logarit cơ số 10 của x, nếu thành công

- Hàm log( ), log10() sẽ trả về giá trị không xác định, nếu x < 0

- Hàm log( ), log10() sẽ trả về giá trị INF, nếu x = 0

Trang 19

double pow(double x, double y);

Trang 21

double ceil(double x);

double question = 45.35, answer;

answer = ceil( question );

printf("\nceil(%.3f) = %.2f", question, answer);

Trang 22

double floor(double x);

Trang 23

double fabs(double x);

Trang 24

double ldexp(double x, int exp);

Trang 25

double frexp(double x,int *expptr);

Parameter:

x: tham số đầu vào double

expptr: Con trỏ trỏ tới vùng nhớ lưu giá trị mũ ( exponent)

Remark:

- Hàm frexp( ) chia nhỏ số dấu phẩy động x thành mantissa (m) và exponent( n) Trong đó, giá trị tuyệt đối của m ( 0.5 <= m < 1.0) và x = m*2^n Số mũ n

exponent được lưu tại vùng nhớ được trỏ tới bởi con trỏ expptr

- Hàm frexp( ) trả về phần mantissa Nếu x = 0, mantissa và exponent đều bằng 0 Nếu expptr = NULL, thì đầu vào không hợp lệ

Trang 26

double modf( double x, double *intptr);

Parameter:

x: tham số đầu vào double

intptr: con trỏ trỏ tới vùng nhớ lưu giá trị phân nguyên

x = -14.87654321; /* Divide x into its fractional */

y = modf( x, &n ); /* and integer parts */

printf( "For %f, the fraction is %f and the integer

Trang 27

double fmod(double x, double y);

Parameter:

x, y: tham số đầu vào double

Remark:

- Hàm fmod( ) trả về phần dư của phép chia x/y Nếu y = 0, hàm sẽ trả về NaN

- Hàm fmod( ) tính phần dư f của phép chia x/y x = i*y + f (trong đó: i là số

Trang 28

double sin( double x );

double cos( double x );

double tan( double x);

Trang 29

double asin( double x );

double acos( double x );

double atan( double x );

Trang 30

double atan2(double y, double x);

Trang 31

double sinh(double x);

double cosh(double x);

double tanh(double x);

Trang 32

- Hàm printf( ) in các kí tự và giá trị ra đầu ra chuẩn ( màn hình console)

- Hàm printf( ) trả về số lượng kí tự in ra màn hình thành công

Trang 33

printf("\nMy forum is: %s", s);

printf("\nMy name's: %s I'm %d age", name, age);

My forum is: vncoding.net

My name's: VuHongViet I'm 25 age

Trang 34

int putchar(int c);

Trang 35

int puts(const char *str);

Trang 36

- Hàm scanf( ) đọc dữ liệu từ đầu vào và lưu giá trị này vào các biến

- Hàm scanf( ) trả về số lượng trường dữ liệu được đọc vào thành công

Ví dụ: Khai báo biến nguyên n, nhập giá trị cho biến n từ bàn phím

Trang 37

int sscanf(const char *buffer, const char

*format[,argument ] );

Parameter:

buffer: lưu dữ liệu đầu vào

format: string định dạng dữ liệu

argument: biến tùy chọn (giống như hàm printf( ))

Remark:

- Hàm sscanf( ) đọc đữ liệu theo định dạng từ string đầu vào và lưu vào các biến

- Hàm trả về số trường dữ liệu được đọc thành công

- Hàm trả về EOF nếu xảy ra lỗi hoặc kết thúc buffer đầu vào

- Hàm trả về -1 nếu buffer đầu vào NULL

// Input various data from tokenstring:

// max 80 character string:

sscanf( tokenstring, "%80s", s ); // C4996

sscanf( tokenstring, "%c", &c ); // C4996

sscanf( tokenstring, "%d", &i ); // C4996

sscanf( tokenstring, "%f", &fp ); // C4996

// Note: sscanf is deprecated; consider using sscanf_s instead

// Output the data read

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

printf( "Character = %c\n", c );

Trang 39

int getchar();

Parameter:

void

Remark:

- Hàm getchar( ) đọc 1 kí tự đầu vào ( bàn phím)

- Hàm trả về kí tự đọc được, nếu đọc thành công

- Hàm trả về EOF nếu xảy ra lỗi

Trang 40

char *gets(char *buffer);

Parameter:

buffer: con trỏ kiểu char lưu string đầu vào

Remark:

Hàm gets( ) đọc string từ đầu vào stdin (bàn phím) và lưu nó trong buffer

- Hàm gets( ) trả về con trỏ trỏ tới vùng nhớ lưu string, nếu đọc thành công

- Hàm gets() trả về NULL, nếu đọc không thành công

// Danger: No way to limit input to 20 chars

// Consider using gets_s instead

printf( "The line entered was: %s\n", line );

Trang 41

int fflush( FILE *stream );

Parameter:

stream: con trỏ file

Remark:

- Hàm fflush( ) “làm sạch” stream( stdin: đầu vào, stdout: đầu vào)

- Hàm fflush( ) trả về 0, nếu stream được “làm sạch” thành công Và trả về EOF nếu lỗi xuất hiện

// Read each word as a string

printf( "Enter a sentence of four words with scanf: " ); for( integer = 0; integer < 4; integer++ )

Trang 42

Enter a sentence of four words with scanf: this is a test

Trang 43

Hàm thao tác file

FILE *fopen( const char *filename,const char *mode);

Parameter:

filename: tên file (bao gồm cả đường dẫn tới file)

mode: các chế độ open khác nhau

“r” : mở để đọc Nếu file không tồn tại hoặc không tìm thấy file, hàm fopen() trả về NULL

“w” : mở để ghi Nếu file đã tồn tại thì nội dung trong file sẽ bị xóa

“a” : mở để ghi tiếp vào cuối file Nếu file không tồn tại, file sẽ được tạo mới

“r+”: mở để đọc và ghi Điều kiện: file phải tồn tại

“w+” : mở file trống để đọc và ghi Nếu file đã tồn tại, nội dung sẽ bị xóa

“a+” : mở để đọc và ghi tiếp vào cuối file Sẽ tạo file mới nếu file không tồn tại

Remark:

- Hàm fopen( ) dùng để mở file để đọc/ghi/

- Hàm fopen( ) sẽ trả về con trỏ FILE nếu mở thành công, và trả về NULL nếu xảy

ra lỗi (không tìm thấy file, file không tồn tại, )

FILE *stream, *stream2;

//Open for reading

if( (stream = fopen( "vncoding.c", "r" )) == NULL )

printf( "The file 'vncoding.c' was not opened\n" ); else

printf( "The file 'vncoding.c' was opened\n" );

Trang 44

// Open for write

if( (stream2 = fopen( "log.txt", "w+" )) == NULL )

printf( "The file 'log.txt' was not opened\n" );

The file 'vncoding.c' was not opened

The file 'log.txt' was opened

Trang 45

int fclose(FILE *stream);

Parameter:

stream: con trỏ FILE

Remark:

- Hàm fclose( ) dùng để đóng file sau khi hoàn thành các thao tác đọc/ghi

- Hàm fclose( ) trả về 0 nếu đóng file thành công Và trả về EOF nếu đóng file xảy

ra lỗi

Trang 46

int fprintf(FILE *stream, const char *format [,argument ] )

Parameter:

stream: con trỏ FILE

format: tương tự như hàm printf( )

Remark:

Hàm fprintf() dùng để ghi dữ liệu ra file (dạng text)

- Hàm fprintf() trả về số byte được ghi ra file

- Hàm trả về giá trị âm, nếu đầu ra xuất hiện lỗi

Ví dụ: Ghi ra file nội dung sau: “This is forum for all developers”

Trang 47

int fscanf(FILE *stream,const char *format [, argument ] );

Paramter:

stream: con trỏ file

format: giống hàm printf( ) và scanf( )

Remark:

Hàm fscanf( ) đọc dữ liệu có định dạng từ file

- Hàm fscanf( ) trả về số lượng trường dữ liệu đọc thành công

- Hàm trả về 0 nếu đọc không thành công

- Format của hàm fscanf( ) phải giống của đầu vào hàm fprintf( )

Chú ý:

- Hàm fscanf( ) đọc dữ liệu xong, con trỏ file sẽ bị dịch chuyển đi

- Nếu hàm fprintf( ) ghi xuống file nhiều dữ liệu khác nhau (int, float, char*, ) thì định dạng ghi xuống nên phân tách giữa các dữ liệu này (có thể bằng dấu cách hoặc tab ‘\t’ hoặc dấu xuông dòng ‘\n’) , thì hàm fscanf( ) mới có thể đọc được

Ví dụ: Ghi và đọc file bằng hàm fprintf( ) và fscanf( )

if( (fp = fopen("D:\\data.bar", "w+" )) == NULL)

printf( "The file data.bar was not opened\n" );

else

Trang 48

{

fprintf( fp, "%s\n%ld %f %c", "vncoding.net", 2013, 3.14159, 'x' );

// Set pointer to beginning of file:

fseek( fp, 0L, SEEK_SET );

// Read data back from file:

n_byte = fscanf(fp, "%s\n%ld %f %c", s, &l, &f, &c); // Output data read:

printf("\nn_byte = %d\n",n_byte);

Trang 49

int fputc(int c, FILE *stream);

Parameter:

C: mã ASCII của kí tự muốn ghi xuống file

stream: con trỏ file

Remark:

- Hàm fputc( ) ghi 1 kí tự xuống file

- Hàm trả về mã ASCII của kí tự được ghi xuống file thành công

- Hàm trả về mã EOF nếu lỗi xảy ra

if((fp = fopen("D:\\data.txt","w+")) == NULL)

printf("\nError in opening file");

Trang 51

int fgetc(FILE *stream);

Parameter:

stream: con trỏ file

Remark:

Hàm fgetc( ) đọc 1 kí tự từ file

- Hàm fgetc( ) trả về mã ASCII của kí tự đọc được

- Hàm trả về EOF nếu gặp lỗi hoặc cuối file

if((fp = fopen("D:\\data.txt","w+")) == NULL)

printf("\nError in opening file");

Trang 52

*p = '\0'; // NULL at the end of string

Trang 53

int fputs(const char *str, FILE *stream);

Parameter:

str: con trỏ tới string

stream: con trỏ file

Remark:

Hàm fputs( ) ghi string (kiểu char*) xuống file

- Hàm fputs( ) trả về giá trị không âm nếu ghi thành công

- Hàm trả về EOF nếu lỗi xảy ra

Ví dụ: xem ví dụ ở hàm fgets( )

Trang 54

char *fgets(char *str, int n, FILE *stream);

Parameter:

str: con trỏ trỏ tới string (đã được khởi tạo hoặc cấp phát bộ nhớ để lưu string đọc từ file)

n: số lượng kí tự tối đa để đọc

stream: con trỏ file

Remark:

Hàm fgets( ) đọc string từ file

- Hàm fgets( ) trả về con trỏ tới string đọc được nếu thành công

- Hàm trả về NULL nếu xảy ra lỗi hoặc gặp cuối file

if((fp = fopen("D:\\data.txt","w+")) == NULL)

printf("\nError in opening file");

Trang 55

}

Kết quả:

vncoding.ne

Trang 56

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

Parameter:

buffer: con trỏ trỏ tới data cần ghi xuống file

size: kích thước data cần ghi xuống file (tính theo byte)

count: số lượng data được ghi xuống file

Remark:

Hàm fwrite() ghi data xuống file Hàm fwrite( ) khác với hàm fprintf( ) ở chỗ: hàm fwrite( ) có thể ghi cả struct, object, xuống file theo kiểu binary Còn hàm fprintf( ) chỉ có thể ghi data có định dạng xuống file (dạng text)

- Hàm fwrite( ) trả về số lượng data được ghi xuống, nếu ghi thành công

- Nếu xảy ra lỗi, hàm sẽ trả về số nguyên nhỏ hơn số lượng data được ghi

Trang 57

size_t fread( void *buffer, size_t size, size_t count, FILE

*stream);

Parameter:

buffer: con trỏ trỏ tới data cần ghi xuống file

size: kích thước data ghi xuống file (tính theo byte)

count: số lượng data được ghi xuống file

stream: con trỏ file

Ví dụ: Ghi xuống file struct dd/mm/yyyy bằng hàm fwrite( ) Sau đó dùng hàm

fread( ) để đọc dữ liệu từ file và hiển thị lên màn hình console

Trang 58

//ghi struct date xuong file data.dat

if(fwrite(&m_date, sizeof(Date), 1, fp) != 1)

printf("Error in writting");

if(fread(&date, sizeof(Date), 1, fp) != 1)

printf("\nError in reading ");

Trang 59

int fseek(FILE *stream, long offset, int origin);

Parameter:

stream: con trỏ file

offset: Số byte sẽ di chuyển con trỏ file từ vị trí origin

origin: vị trí ban đầu của con trỏ file Dưới đây là một số hằng số đã được định nghĩa sắn trong thư viện stdio.h

SEEK_CUR: vị trí hiện tại của con trỏ file

SEEK_END: vị trí cuối file

SEEK_SET: vị trí đầu file

Remark:

Hàm fseek( ) dịch con trỏ file tới vị trí mong muốn

- Hàm fseek( ) trả về 0 nếu dịch con trỏ file thành công

- Hàm trả về giá trị khác 0 nếu xảy ra lỗi

if((fp = fopen("D:\\data.txt","w+")) == NULL)

printf("\nError in opening file");

else

{

fputs(forum_name, fp);

Ngày đăng: 09/11/2014, 15:26

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w