Đọc ghi File trong C – Hướng dẫn thao tác với File trong C

Tóm Tắt

1. Đặc tả tập tin trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu về đặc tả tập tin trong ngôn ngữ lập trình C. Bạn cũng sẽ học được cách xử lý luồng vào ra tiêu chuẩn trong lập trình C bằng cách sử dụng fprintf(), fscanf(), fread(), fwrite(), fseek(),… thông qua các ví dụ.

Tệp ( File ) là một vùng chứa trong những thiết bị tàng trữ của máy tính được sử dụng để tàng trữ tài liệu .

doc ghi file trong c1.1 Vì sao các tệp lại quan trọng?

  •  Khi một lập trình kết thúc, toàn bộ dữ liệu sẽ bị mất. Lưu trữ vào tệp sẽ giúp bảo toàn dữ liệu của bạn ngay cả khi lập trình kết thúc.
  • Bạn sẽ mất rất nhiều thời gian để nhập một lượng dữ liệu lớn vào. Tuy nhiên, nếu bạn có một tệp chứa tất cả dữ liệu, bạn sẽ dễ dàng truy cập vào nội dung của tệp đó bằng cách sử dụng một vài lệnh trong lập trình C.
  • Bạn có thể dễ dàng di chuyển dữ liệu của mình từ máy tính này sang máy tính khác mà không có bất cứ sự thay đổi nào.

1.2 Các loại tệp

Có 2 loại tệp sau đây :

  1. Tệp văn bản
  2. Tập tin nhị phân

1.2.1 Tệp văn bản

Tệp văn bản là tệp .txt bình thường. Bạn có thể dễ dàng tạo ra tệp văn bản bằng những trình soạn thảo văn bản như Notepad.

Khi mở những tệp này, bạn sẽ thấy tổng thể nội dung trong đó là những văn bản thuần túy. Bạn hoàn toàn có thể thuận tiện chỉnh sửa hoặc xóa những nội dung trong tệp .
Dù những tệp văn bản không có tính bảo mật thông tin cao và chiếm khoảng trống tàng trữ lớn, nhưng chúng lại dễ đọc .

1.2.2 Tập tin nhị phân

Các tập tin nhị phân chủ yếu là các tệp bin. trong máy tính của bạn.

Thay vì tàng trữ tài liệu dưới dạng văn bản thuần túy thì chúng tàng trữ tài liệu dưới dạng nhị phân ( 0 và 1 ) .
Các tập tin nhị phân hoàn toàn có thể chứa lượng lớn tài liệu nhưng chúng không dễ đọc và có tính bảo mật thông tin cao hơn những tệp văn bản .

1.3 Các thao tác với file trong C

Bạn hoàn toàn có thể triển khai 4 thao tác với file trong C ( kể cả tệp văn bản hay tập tin nhị phân ) như sau :

  1. Tạo file mới
  2. Mở file đang có
  3. Đóng file
  4. Đọc ghi file trong C

1.3.1 Làm việc với file trong C

Khi làm việc với file trong C, bạn cần khai báo con trỏ của kiểu tệp. Khai báo giúp tạo liên kết giữa tệp và lập trình .
FILE * fptr ;

1.3.2 Mở file – để tạo và chỉnh sửa

Để có thể đọc ghi file trong C, trước hết bạn phải mở tệp bằng cách sử dụng hàm fopen trong C được xác định trong tệp tiêu đề stdio.h.

Cú pháp để mở tệp trong luồng vào ra tiêu chuẩn như sau :
ptr = fopen ( “ fileopen ”, ” mode ” ) ;
Ví dụ ,
fopen ( “ E : \ \ cprogram \ \ newprogram.txt ”, ” w ” ) ;
fopen ( “ E : \ \ cprogram \ \ oldprogram.bin ”, ” rb ” ) ;

Giả sử tệp newprogram.txt không tồn tại ở vị trí E:\cprogram. Hàm đầu tiên sẽ tạo ra một tệp mới có tên là newprogram.txt và mở tệp này. Bạn có thể thêm văn bản vào tệp bởi chế độ của tệp này là ‘w’.

Thuộc tính writing mode được cho phép bạn tạo hoặc chỉnh sửa nội dung của một tệp .

Xét đến tập tin nhị phân thứ 2. Giả sử tập tin nhị phân oldprogram.bin tồn tại ở vị trí E:\cprogram. Hàm thứ 2 sẽ mở tập tin đang có và bạn có thể đọc được được nội dung ở chế độ nhị phân ‘rb‘.

Tính năng đọc chỉ được cho phép bạn đọc tệp nhưng không hề ghi tài liệu vào tệp được .
Bảng. Các chính sách mở trong luồng ra vào tiêu chuẩn trong lập trình C

Chế độ Ý nghĩa của chế độ Trong thời gian tệp không tồn tại
r Mở để đọc Nếu tệp không tồn tại, fopen() trả về NULL.
rb Mở để đọc ở chế độ nhị phân. Nếu tệp không tồn tại, fopen() trả về  NULL.
w Mở để ghi dữ liệu Nếu tệp tồn tại, nội dung của nó sẽ được ghi đè lên
Nếu tệp không sống sót, sẽ tạo một tệp mới .
wb Mở để ghi dữ liệu trong chế độ nhị phân Nếu tệp tồn tại, nội dung của nó sẽ được ghi đè lên
Nếu tệp không sống sót, sẽ tạo một tệp mới .
a Mở để bổ sung dữ liệu
Thêm tài liệu vào phần cuối tệp
Nếu tệp không tồn tại, sẽ tạo một tệp mới.
ab Mở để bổ sung dữ liệu trong chế độ nhị phân
Thêm tài liệu vào phần cuối tệp
Nếu tệp không tồn tại, sẽ tạo một tệp mới.
r+ Mở để đọc và ghi dữ liệu vào Nếu tệp không tồn tại fopen() trả về NULL.
rb+ Mở để đọc và ghi dữ liệu trong chế độ nhị phân Nếu tệp không tồn tại fopen() trả về NULL
w+ Mở để đọc và ghi dữ liệu vào Nếu tệp tồn tại, nội dung của nó sẽ được ghi đè lên
Nếu tệp không sống sót, sẽ tạo một tệp mới .
wb+ Mở để đọc và ghi dữ liệu vào trong chế độ nhị phân Nếu tệp tồn tại, nội dung của nó sẽ được ghi đè lên
Nếu tệp không sống sót, sẽ tạo một tệp mới .
a+ Mở để đọc và bổ sung dữ liệu Nếu tệp không tồn tại, sẽ tạo một tệp mới.
ab+ Mở để đọc và bổ sung dữ liệu trong chế độ nhị phân Nếu tệp không tồn tại, sẽ tạo một tệp mới.

1.3.3 Đóng tệp

Bạn phải đóng tệp ( cả tệp văn bản và tập tin nhị phân ) sau khi đọc ghi file trong C .
Sử dụng hàm fclose ( ) để đóng tệp .
fclose ( fptr ) ;
fptr là một con trỏ tệp được link với tệp sẽ được đóng .

1.3.4 Đọc ghi dữ liệu từ file văn bản trong C

Để đọc và ghi tài liệu vào tệp văn bản, bạn sử dụng hàm fprintf và fscanf trong C
2 hàm trên là những phiên bản khác của lần lượt 2 hàm printf ( ) và scanf ( ). Tuy nhiên, có một sự độc lạ : 2 hàm fprint ( ) và fscanf ( ) sẽ hướng dẫn con trỏ đến cấu trúc FILE .

Ví dụ 1: ghi dữ liệu vào file văn bản

#include

#include

int main ( )
{
int num ;
FILE * fptr ;
/ / use appropriate location if you are using MacOS or Linux
fptr = fopen ( “ C : \ \ program.txt ”, ” w ” ) ;
if ( fptr = = NULL )
{
printf ( “ Error ! ” ) ;
exit ( 1 ) ;
}
printf ( “ Enter num : “ ) ;
scanf ( “ % d ”, và num ) ;
fprintf ( fptr, ” % d ”, num ) ;
fclose ( fptr ) ;
return 0 ;
}
Lập trình này sẽ lấy một số ít do người dùng nhập rồi tàng trữ nó trong tệp program.txt .
Sau khi thực thi biên dịch và chạy lập trình, bạn sẽ thấy tệp văn bản program.txt đã được tạo trong ổ C của máy tính. Khi mở tệp này, bạn sẽ thấy số nguyên mà bạn đã nhập vào .

Ví dụ 2: Đọc file trong C

#include

#include

int main ( )
{
int num ;
FILE * fptr ;
if ( ( fptr = fopen ( “ C : \ \ program.txt ”, ” r ” ) ) = = NULL ) {
printf ( “ Error ! opening file ” ) ;
/ / Program exits if the file pointer returns NULL .
exit ( 1 ) ;
}
fscanf ( fptr, ” % d ”, và num ) ;
printf ( “ Value of n = % d ”, num ) ;
fclose ( fptr ) ;
return 0 ;
}
Lập trình này sẽ đọc số nguyên đang có trong tệp tin program.txt và in nó lên màn hình hiển thị .
Chẳng hạn, khi lập trình ở ví dụ 1 chạy, nó sẽ nhận được số nguyên mà bạn đã nhập vào .
Các hàm fgetchar ( ), fputc ( ), … cũng được sử dụng tương tự như như trên .

1.3.5 Đọc và ghi dữ liệu vào tập tin nhị phân

Khi muốn đọc hoặc ghi tài liệu vào tập tin nhị phân, bạn sử dụng tệp fread và fwrite trong C .

Ghi dữ liệu vào tập tin nhị phân.

Sử dụng hàm fwrite ( ) để ghi tài liệu vào tập tin nhị phân. Hàm này có 4 đối số như sau :

  1. địa chỉ của dữ liệu được ghi vào đĩa
  2. kích thước của dữ liệu được ghi vào đĩa
  3. số lượng các loại dữ liệu này
  4. đưa con trỏ đến tệp mà bạn muốn ghi dữ liệu.

fwrite ( addressData, sizeData, numbersData, pointerToFile ) ;

Ví dụ 3: Ghi dữ liệu vào tệp nhị phân bằng hàm fwrite trong C

#include

#include

struct threeNum
{
int n1, n2, n3 ;
} ;
int main ( )
{
int n ;
struct threeNum num ;
FILE * fptr ;
if ( ( fptr = fopen ( “ C : \ \ program.bin ”, ” wb ” ) ) = = NULL ) {
printf ( “ Error ! opening file ” ) ;
/ / Program exits if the file pointer returns NULL .
exit ( 1 ) ;
}
for ( n = 1 ; n < 5 ; + + n ) { num. n1 = n ; num. n2 = 5 * n ; num. n3 = 5 * n + 1 ; fwrite ( và num, sizeof ( struct threeNum ), 1, fptr ) ; } fclose ( fptr ) ; return 0 ; } Trong lập trình này, tôi tạo một tệp program.bin mới trong ổ C . Tôi đã khai báo cấu trúc threeNum với 3 số là n1, n2 và n3 và xác lập nó thuộc kiểu num trong hàm ( main ) . Bên trong vòng lặp for, tôi sử dụng hàm fwrite ( ) để lưu giá trị vào tệp . Tham số tiên phong lấy địa chỉ của num và tham số thứ 2 lấy size của cấu trúc threeNum . Vì tôi chỉ chèn vào một num nên tham số thứ 3 là 1. Và tham số ở đầu cuối * fptr sẽ trỏ đến tệp mà tôi đang dùng để tàng trữ tài liệu .

Cuối cùng, tôi đóng tệp sau khi hoàn thành đọc ghi file trong C

Đọc dữ liệu từ tập tin nhị phân

Hàm fread trong C cũng có 4 đối số tựa như như hàm fwrite ( ) .
fread ( addressData, sizeData, numbersData, pointerToFile ) ;

Ví dụ 4: Đọc dữ liệu từ tệp nhị phân bằng hàm fread trong C

#include

#include

struct threeNum
{
int n1, n2, n3 ;
} ;
int main ( )
{
int n ;
struct threeNum num ;
FILE * fptr ;
if ( ( fptr = fopen ( “ C : \ \ program.bin ”, ” rb ” ) ) = = NULL ) {
printf ( “ Error ! opening file ” ) ;
/ / Program exits if the file pointer returns NULL .
exit ( 1 ) ;
}
for ( n = 1 ; n < 5 ; + + n ) { fread ( và num, sizeof ( struct threeNum ), 1, fptr ) ; printf ( “ n1 : % d \ tn2 : % d \ tn3 : % d ”, num. n1, num. n2, num. n3 ) ; } fclose ( fptr ) ; return 0 ; } Trong lập trình này, tôi sẽ lướt qua từng bản ghi một trong cùng một tệp program.bin Nói một cách dễ hiểu, tôi sẽ đọc bản ghi threeNum trong tệp threeNum. Bản ghi này nằm trong tệp được chỉ định bởi hàm * fptr trong cấu trúc num .

1.3.6 Lấy dữ liệu bằng cách sử dụng hàm fseek()

Nếu trong một tệp có nhiều bản ghi và bạn chỉ muốn truy vấn vào một bản ghi ở một vị trí đơn cử, bạn cần phải lướt qua tất những bản ghi trước khi lấy được bản ghi mà mình mong ước .
Sẽ mất rất nhiều thời hạn và sức lực lao động để hoàn thành xong trách nhiệm này. Tuy nhiên, chỉ cần sử dụng hàm fseek ( ) là bạn sẽ thuận tiện truy vấn vào tài liệu đang cần .
Hàm fseek ( ) sẽ đưa con trỏ đến bản ghi mà bạn muốn tìm trong tệp .
Cú pháp của fseek ( )
fseek ( FILE * stream, long int offset, int whence ) ;
Luồng tham số tiên phong là con trỏ chỉ đến tệp. Tham số thứ 2 chính là vị trí nơi mà bản ghi được tìm thấy và tham số thứ 3 chính là vị trí mà con trỏ khởi đầu
Bảng : Các vị trí mở màn khác nhau trong hàm fseek ( )

Whence Ý nghĩa
SEEK_SET Bắt đầu từ vị trí đầu tệp
SEEK_END Bắt đầu từ vị trí cuối tệp
SEEK_CUR Bắt đầu từ vị trí hiện tại của con trỏ trong tệp

Ví dụ 5: fseek()

#include

#include

struct threeNum
{
int n1, n2, n3 ;
} ;
int main ( )
{
int n ;
struct threeNum num ;
FILE * fptr ;
if ( ( fptr = fopen ( “ C : \ \ program.bin ”, ” rb ” ) ) = = NULL ) {
printf ( “ Error ! opening file ” ) ;
/ / Program exits if the file pointer returns NULL .
exit ( 1 ) ;
}
/ / Moves the cursor to the end of the file
fseek ( fptr, – sizeof ( struct threeNum ), SEEK_END ) ;
for ( n = 1 ; n < 5 ; + + n ) { fread ( và num, sizeof ( struct threeNum ), 1, fptr ) ; printf ( “ n1 : % d \ tn2 : % d \ tn3 : % d \ n ”, num. n1, num. n2, num. n3 ) ; fseek ( fptr, - 2 * sizeof ( struct threeNum ), SEEK_CUR ) ; } fclose ( fptr ) ; return 0 ; } Lập trình này sẽ khởi đầu đọc những bản ghi từ tệp program.bin theo thứ tự từ dưới lên trên và in nó ra .

2. Thông tin thêm về C

2.1 Kiểu liệt kê trong lập trình C

Trong phần này, bạn sẽ được khám phá về liệt kê trong ngôn từ lập trình C trải qua những ví dụ .
Trong lập trình C, kiểu liệt kê ( hay còn gọi là enum ) là kiểu tài liệu gồm có những hằng số tích phân. Sử dụng từ khóa enum để xác lập kiểu liệt kê .
enum flag { const1, const2, …, constN } ;
Theo mặc định, const1 là 0, const2 là 1, … ) Bạn hoàn toàn có thể biến hóa giá trị mặc định của những thành phần enum trong quy trình khai báo ( nếu thực sự cần ) .
/ / Changing default values of enum constants
enum suit {
club = 0 ,
diamonds = 10 ,
hearts = 20 ,
spades = 3 ,
} ;

2.1.1 Khai báo kiểu liệt kê

Ngay khi bạn xác lập được kiểu liệt kê thì bản thiết kế cho biến sẽ được tạo ra. Dưới đây là cách tạo những biến của những kiểu liệt kê
enum boolean { false, true } ;
enum boolean check ; / / declaring an enum variable
Ở đây, biến check của loại enum boolean được tạo ra .

Bạn cũng có thể khai báo biến enum như sau:

enum boolean { false, true } check ;
Giá trị của false bằng 0 và giá trị của true bằng 1 .

Ví dụ: Kiểu liệt kê

#include

enum week { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } ;
int main ( )
{
/ / creating today variable of enum week type
enum week today ;
today = Wednesday ;
printf ( “ Day % d ”, today + 1 ) ;
return 0 ;
}
Output
Day 4

2.1.2 Vì sao nên sử dụng enums?

Biến enum chỉ hoàn toàn có thể nhận một giá trị. Dưới đây là ví dụ chứng tỏ :

#include

enum suit {
club = 0 ,
diamonds = 10 ,
hearts = 20 ,
spades = 3
} card ;
int main ( )
{
card = club ;
printf ( “ Size of enum variable = % d bytes ”, sizeof ( card ) ) ;
return 0 ;
}
Đầu ra
Size of enum variable = 4 bytes
Kết quả in trên màn hình hiển thị là 4 chính bới kích cỡ của int là 4 byte
Do đó, enum chính là sự lựa chọn tương thích với những cờ .

2.1.3 Làm thế nào để sử dụng enum làm cờ?

Hãy xem ví dụ dưới đây
enum designFlags {
ITALICS = 1 ,
BOLD = 2 ,
UNDERLINE = 4
} button ;
Giả sử bạn đang phong cách thiết kế một nút cho ứng dụng trên Windows. Bạn hoàn toàn có thể đặt cờ ITALICS, BOLD và UNDERLINE tương thích với văn bản .
Đây là nguyên do vì sao toàn bộ những hằng số tích phân là lũy thừa của 2 trong mã giá trên .
/ / In binary
ITALICS = 00000001
BOLD = 00000010
UNDERLINE = 00000100
Vì những hằng số tích phân là lũy thừa của 2 nên bạn hoàn toàn có thể tích hợp 2 hoặc nhiều cờ cùng một lúc mà không trùng lặp bằng cách sử dụng toán tử bitwise OR. Điều này được cho phép bạn lựa chọn 2 hoặc nhiều cờ cùng một lúc. Ví dụ ,

#include

enum designFlags {
BOLD = 1 ,
ITALICS = 2 ,
UNDERLINE = 4
} ;
int main ( ) {
int myDesign = BOLD | UNDERLINE ;
/ / 00000001
/ / | 00000100
/ / ___________
/ / 00000101
printf ( “ % d ”, myDesign ) ;
return 0 ;
}
Đầu ra
5
Đầu ra là 5 có nghĩa là cờ bold và cờ underline được sử dụng .
Ngoài ra, bạn hoàn toàn có thể thêm những cờ tùy thuộc vào nhu yếu của mình .
if ( myDesign và ITALICS ) {
/ / code for italics
}
Tôi đã thêm cờ italics vào phong cách thiết kế của mình. Lưu ý, chỉ viết code for italics bên trong câu lệnh if .
Bạn hoàn toàn có thể triển khai những lập trình C mà không cần sử dụng đến phép liệt kê. Tuy nhiên, chúng cũng mang lại quyền lợi trong một vài trường hợp nhất định .

3. Bộ tiền xử lý trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu và khám phá về bộ tiền giải quyết và xử lý trong lập trình C. Bên cạnh đó, bạn cũng được học về cách sử dụng # include, # define và biên dịch có điều kiện kèm theo trải qua những ví dụ .
Bộ tiền giải quyết và xử lý trong lập trình C là bộ tiền giải quyết và xử lý macro ( được cho phép bạn xác lập những macro ) giúp quy đổi lập trình của bạn trước khi nó được biên dịch. Các quy đổi này hoàn toàn có thể là tệp tiêu đề, lan rộng ra macro, …
Tất cả những thông tư tiền giải quyết và xử lý đều khởi đầu bằng ký hiệu #. Ví dụ ,
# define PI 3.14
Một số cách sử dụng thông dụng của bộ tiền giải quyết và xử lý trong lập trình C :

3.1 Tệp tiêu đề including (bao gồm): #include

Bộ tiền giải quyết và xử lý của # include được sử dụng để đưa những tệp tiêu đề vào lập trình C. Ví dụ :

#include

stdio. h chính là một tệp tiêu đề. Chỉ thị tiền giải quyết và xử lý # include sửa chữa thay thế dòng phía trên bằng cách sử dụng nội dung của tệp tiêu đề stdio. h .

Đó là lý do vì sao bạn cần sử dụng #include trước khi dùng các hàm như scanf() và printf().

Bạn cũng hoàn toàn có thể tạo những tệp tiêu đề chứa khai báo hàm và đưa nó vào lập trình của bạn bằng cách sử dụng thông tư tiền giải quyết và xử lý dưới đây
# include “ my_header. h ”
Truy cập vào trang này để biết thêm thông tin về cách sử dụng tệp tiêu đề .

3.2 Macro sử dụng #define

Marco là một đoạn code được đặt tên. Bạn hoàn toàn có thể xác lập marco trong lập trình C bằng cách sử dụng thông tư tiền giải quyết và xử lý # define .
Hãy xem ví dụ dưới đây
# define c 299792458 / / speed of light
Khi được sử dụng trong lập trình, c sẽ được sửa chữa thay thế bằng 299792458 .

Ví dụ 1: bộ tiền xử lý #define

#include

# define PI 3.1415
int main ( )
{
float radius, area ;
printf ( “ Enter the radius : “ ) ;
scanf ( “ % f ”, và radius ) ;
/ / Notice, the use of PI
area = PI * radius * radius ;
printf ( “ Area = %. 2 f ”, area ) ;
return 0 ;
}

3.3 Hàm giống như các Macro

Bạn cũng hoàn toàn có thể xem những macro hoạt động giải trí tựa như như lời gọi hàm. Chúng được gọi là function-like macro. Ví dụ
# define circleArea ( r ) ( 3.1415 * ( r ) * ( r ) )
Mỗi khi lập trình này gặp đối số circleArea ( argument ), nó sẽ được thay thế sửa chữa bằng ( 3.1415 * ( argument ) * ( argument ) .
Giả sử, tôi nhập 5 làm đối số và sau đó, nó sẽ được lan rộng ra như bên dưới :
circleArea ( 5 ) expands to ( 3.1415 * 5 * 5 )

Ví dụ 2: Sử dụng bộ tiền xử lý #define

#include

# define PI 3.1415
# define circleArea ( r ) ( PI * r * r )
int main ( ) {
float radius, area ;
printf ( “ Enter the radius : “ ) ;
scanf ( “ % f ”, và radius ) ;
area = circleArea ( radius ) ;
printf ( “ Area = %. 2 f ”, area ) ;
return 0 ;
}
Truy cập vào trang này để biết thêm thông tin cụ thể về macro và bộ tiền giải quyết và xử lý # define .

3.4 Biên dịch có điều kiện

Trong lập trình C, bạn hoàn toàn có thể thông tin với bộ tiền giải quyết và xử lý rằng có cần thêm một khối mã nhất định vào hay không. Sử dụng những thông tư có điều kiện kèm theo để xử lý yếu tố trên .
Nó tựa như như câu lệnh if nhưng vẫn có một vài điểm độc lạ .
Câu lệnh if được kiểm tra trong quy trình triển khai kiểm tra một khối mã nên được thực thi hay không. Còn những thông tư có điều kiện kèm theo được sử dụng để thêm ( hoặc bỏ lỡ ) một khối mã trong lập trình trước khi thực thi .
Cách sử dụng thông tư có điều kiện kèm theo

  • sử dụng những mã khác nhau tùy thuộc vào máy và hệ điều hành
  • biên dịch cùng một tệp nguồn trong 2 lập trình khác nhau
  • có thể loại bỏ một mã nhất định ra khỏi lập trình nhưng vẫn lưu trữ lại cho những lần dùng tiếp theo.

3.4.1 Làm thế nào để sử dụng các chỉ thị có điều kiện?

Để sử dụng những thông tư có điều kiện kèm theo, bạn dùng những thông tư # ifdef, # if, # defined, # else và # elseif .

#ifdef Directive

# ifdef MACRO
/ / conditional codes
# endif
Các mã có điều kiện kèm theo chỉ được thêm vào lập trình khi MACRO được xác lập

#if, #elif and #else Directive

# if expression
/ / conditional codes
# endif
expression là một biểu thức kiểu số nguyên ( hoàn toàn có thể là số nguyên, ký tự, biểu thức số học, macro, … )
Các mã điều kiện kèm theo chỉ được thêm vào lập trình khi expression được nhìn nhận là có giá trị khác 0 .
Chỉ thị # else mang tính tùy chọn hoàn toàn có thể được sử dụng với thông tư # if .
# if expression
conditional codes if expression is non-zero
# else
conditional if expression is 0
# endif
Bạn cũng hoàn toàn có thể thêm điều kiện kèm theo lồng vào # if … # else bằng cách sử dụng # elif
# if expression
/ / conditional codes if expression is non-zero
# elif expression1
/ / conditional codes if expression is non-zero
# elif expression2
/ / conditional codes if expression is non-zero
# else
/ / conditional if all expressions are 0
# endif

#defined

Toán tử đặc biệt quan trọng # defined được sử dụng để kiểm tra xem một macro nhất định có được xác lập hay không. Nó thường được sử dụng với thông tư # if .
# if defined BUFFER_SIZE và và BUFFER_SIZE > = 2048
/ / codes

3.4.2 Các Macro được xác định trước

Dưới đây là 1 số ít macro được xác lập trước trong lập trình C .

Macro Giá trị
__DATE__ Chuỗi chứa ngày hiện tại
__FILE__ Chuỗi chứa tên tệp
__LINE__ Một số nguyên đại diện cho số dòng hiện tại
__STDC__ If follows ANSI standard C, then the value is a nonzero integer
Nếu tuân theo tiêu chuẩn ANSI trong lập trình C, thì giá trị là một số nguyên khác 0
__TIME__ Chuỗi chứa ngày hiện tại

Ví dụ 3: Sử dụng __TIME__ để xác định thời gian hiện tại

Lập trình sau sẽ xuất đầu ra là thời hạn hiện tại bằng cách sử dụng marco __TIME__ .

#include

int main ( )
{
printf ( “ Current time : % s ”, __TIME__ ) ;
}
Đầu ra
Current time : 19:54:39
Tìm hiểu thêm :

  •         Điều khiển dòng
  •         Bộ tiền xử lý Pragmas
  •         Đầu ra của bộ tiền xử lý
  •         Các chỉ thị khác

4. Thư viện C chuẩn

4.1 Các hàm thư viện tiêu chuẩn trong lập trình C

Trong phần này, bạn sẽ được tìm hiểu và khám phá về những hàm thư viện tiêu chuẩn trong lập trình C. Cụ thể là định nghĩa và những loại hàm thư viện khác nhau cũng như cách sử dụng chúng trong lập trình của bạn .
Các hàm thư viện chuẩn chính là những hàm đã sẵn có trong lập trình C .
Nguyên mẫu hàm và định nghĩa tài liệu của những hàm này có trong những tệp tiêu đề tương ứng. Để sử dụng những hàm này, bạn cần thêm những tệp tiêu đề vào lập trình. Ví dụ ,

Nếu muốn sử dụng hàm printf() thì bạn phải thêm tệp tiêu đề vào.

#include

int main ( )
{
printf ( “ Catch me if you can. ” ) ;
}
Nếu bạn nỗ lực sử dụng hàm printf ( ) mà không thêm tệp tiêu để stdio. h vào thì lập trình sẽ báo lỗi .

4.2 Những ưu điểm khi sử dụng các hàm thư viện C

  1. Các hàm chạy ổn định

Một trong những nguyên do quan trọng mà bạn nên sử dụng những hàm thư viện chính là chúng chạy rất không thay đổi. Các hàm này đã trải qua nhiều cuộc thử nghiệm khắt khe và rất dễ sử dụng .

  1. Các hàm này đã được tối ưu hóa hiệu suất

Vì chúng là những hàm thư viện chuẩn, do đó, một nhóm những developer sẽ liên tục nâng cấp cải tiến chúng để có được phiên bản tốt nhất. Trong quy trình nâng cấp cải tiến, họ hoàn toàn có thể tạo ra những mã hiệu quả nhất để tối ưu hóa hiệu suất .

  1. Giúp tiết kiệm thời gian

Các hàm tổng quát như in ra màn hình hiển thị, tính căn bậc 2, … đều đã được viết sẵn. Do đó, bạn không cần phải lo ngại về việc viết lại chúng một lần nữa .

  1. Các hàm rất linh động

Mọi thứ luôn đổi khác từng ngày và ứng dụng của bạn cũng phải hoạt động giải trí mọi lúc mọi nơi. Do đó, những hàm thư viện sẽ giúp bạn hoàn toàn có thể triển khai một trách nhiệm ở nhiều máy tính khác nhau .

Ví dụ: sử dụng hàm sqrt () để tính căn bậc 2

Giả sử bạn muốn tìm căn bậc 2 của 1 số ít .
Để hoàn toàn có thể tính được căn bậc 2 của 1 số ít, bạn hoàn toàn có thể sử dụng hàm thư viện sqrt ( ). Hàm này được xác lập trong tệp tiêu đề math. h

#include

#include

int main ( )
{
float num, root ;
printf ( “ Enter a number : “ ) ;
scanf ( “ % f ”, và num ) ;
/ / Computes the square root of num and stores in root .
root = sqrt ( num ) ;
printf ( “ Square root of %. 2 f = %. 2 f ”, num, root ) ;
return 0 ;
}
Khi bạn chạy lập trình này, đầu ra sẽ là

Enter a number: 12

Square root of 12.00 = 3.46
Các hàm thư viện trong những tệp tiêu đề khác

Các tệp tiêu đề trong lập trình C
Các hàm xác nhận lập trình
Các hàm kiểu ký tự
Các hàm có chức năng bản địa hóa
Các hàm toán học
Các hàm chứa lệnh nhảy
Các hàm xử lý tín hiệu
Các hàm xử lý đối số của biến
Các hàm luồng vào ra tiêu chuẩn
Các hàm số hiệu dụng tiêu chuẩn
Các hàm xử lý chuỗi
Các hàm ngày giờ