T trong c là gì

Hướng dẫn cách sử dụng ký tự đặc biệt trong C[tiếng anh: escape sequence; tiếng Nhật:エスケープシーケンス]. Bạn sẽ học được cách sử dụng ký tự đặc biệt trong C khi xử lý chuỗi sau bài học này.

Ký tự đặc biệt trong C là gì

Ký tự đặc biệt trong C hay còn gọi là escape sequence, hoặc là chuỗi thoát trong C, là các chuỗi ký tự bắt đầu bởi dấu gạch chéo ngược như \n hay \a , nhằm biểu diễn các ký tự vốn không thể biểu diễn theo cách thông thường trong C.

Lấy ví dụ như ký tự xuống dòng tạo bởi phím Enter. Chúng ta đều biết khi nhấn Enter thì sẽ xuống dòng, tuy nhiên chúng ta lại không có ký tự đơn nào để biểu thị hành động tôi muốn xuống dòng bên trong chương trình cả. Do đó, chúng ta sẽ dùng dấu gạch ngược \ kết hợp với ký tự n để tạo ra ký tự đặc biệt \n có tác dụng biểu diễn ký tự xuống dòng tạo bởi phím Enter.

Trong C, chúng ta dùng ký hiệu \ kèm với ký tự khác để biểu diễn ký tự đặc biệt. Hãy cùng xem bảng tổng hợp ký tự đặc biệt trong C dưới đây:

số thứ tựký tự đặc biệtÝ nghĩa
1\aÂm cảnh báo
2\bbackspace
3\nký tự xuống dòng [LF]
4\rký tự xuống dòng [CR]
5\fTách trang
5\tký tự TAB
5\tký tự TAB
6\vTAB dọc
7Ký tự tiền yên
8\?Dấu chấm hỏi
9\\Dấu gạch chéo ngược
10\'dấu nháy đơn [‘]
11\"dấu nháy kép [“]
12\0Null
13\000ASCII ký tự hệ cơ số 8
14\xhhASCII ký tự hệ cơ số 16

Trong đó chúng ta thường hay sử dụng nhiều nhất đó là các ký tự đặc biệt của dấu ngoặc đơn \', dấu nháy kép \" ,ký tự xuống dòng \n và dấu tab \t.

Ví dụ điển hình như ký tự xuống dòng \n chẳng hạn, chúng ta chỉ cần viết ký tự này giữa một chuỗi tại vị trí muốn ngắt dòng như sau:

Tại vị trí chứa chuỗi \n, bạn đã ra lệnh cho máy tính xuống dòng ở đó, và cách viết trên sẽ được máy tính hiểu như sau:

Cách sử dụng ký tự đặc biệt trong C

Để sử dụng ký tự đặc biệt [chuỗi thoát] trong C, chúng ta viết ký tự đặc biệt vào vị trí mà cần thêm vào trong chuỗi.
Ví dụ sau đây, chúng ta sẽ thêm ký tự đặc biệt xuống dòng vào chuỗi như sau:



int main[void]{
printf["%s\n", "Chào bạn\nBạn có khoẻ không\nHẹn gặp sau nhé"];
printf["%s\n", "Đây là dấu tab:\t\t\ttrong câu"];

return 0;
}

Kết quả, ở những vị trí có ký tự đặc biệt sẽ được chuyển thành xuống dòng hoặc tab như sau:

Chào bạn
Bạn có khoẻ không
Hẹn gặp sau nhé
Đây là dấu tab: trong câu

Một ví dụ khác, trong bài chuỗi ký tự trong C chúng ta đã biết cách sử dụng dấu nháy kép " để viết một chuỗi ký tự. Nói cách khác thì chương trình C khi gặp dấu nháy kép " thì sẽ tự động hiểu rằng, chỗ này đã bắt đầu một chuỗi ký tự rồi đấy.

Tuy nhiên, trong trường hợp chúng ta không muốn dùng dấu nháy kép " để khai báo chuỗi ký tự, mà sử dụng nó như một ký tự bình thường trong câu thì sao? Ví dụ như chuỗi sau đây chẳng hạn:

Anh ấy rất "đặc biệt" với tôi

Lúc này nếu để chuỗi này [bao gồm cả dấu nháy kép] trong cặp dấu nháy kép để khai báo chuỗi ký tự theo cách thông thường thì lỗi sẽ xảy ra như sau:



int main[void]{ ;
printf["%s\n", "Anh ấy rất "đặc biệt" với tôi"];
return 0;
}

>>>Main.c:4:35: error: expected ']'
>>> printf["%s\n", "Anh ấy rất "đặc biệt" với tôi"];

Để giải quyết lỗi ở trên, chúng ta chỉ cần đơn giản sử dụng tới ký tự đặc biệt của dấu nháy kép \" và sử dụng nó trong chuỗi trên là xong:



int main[void]{ ;
printf["%s\n", "Anh ấy rất \"đặc biệt\" với tôi"];
return 0;
}

Kết quả:

Anh ấy rất "đặc biệt" với tôi

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách sử dụng ký tự đặc biệt escape sequence trong C rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> lập trình c cơ bản dành cho người mới học lập trình>>05. ký tự và số trong c

Bài sauBài tiếp

  • \n : Nhảy xuống dòng kế tiếp canh về cột đầu tiên.
  • \t : Tab ngang.
  • \r : Nhảy về đầu hàng, không xuống hàng.
  • \a : Tiếng kêu bip.
  • \\ : In ra dấu \
  • \” : In ra dấu “
  • \’ : In ra dấu ‘
  • %%: In ra dấu %

Đây chỉ là một số ký tự điểu khiển quen thuộc, hay dùng, ngoài ra còn một só ký tự điều khiển khác các bạn có thể xem thêm trong các tài liệu khác. Để hiểu rõ về các ký tự điều khiển các bạn hãy chạy thử chương trình sau và tự rút ra nhận xét cho riêng mình.

#include int main[] { printf["\a"]; printf["Hinh nhu vua co tieng gi keu @@\n"]; printf["Ban dang o dong thu 2\nBay gio xuong dong 3 roi ne ^^\n"]; printf["\tDong nay cach ra 1 tab thi phai?\n"]; printf["\t\t\t\t\t\tCach ra nhieu tab qua \rVe dau dong thoi\n"]; printf["Dau \\ \nDau \'\nDau \" \nDau %%\n"]; // day la mot dong ghi chu va chi co tac dung chu thich khi viet code cho de hieu /* Day la mot doan ghi chu Doan ghi chu nay co 2 dong */ return 0; }

2. Bộ chữ viết

Bộ chữ viết trong ngôn ngữ C bao gồm những ký tự, ký hiệu sau: [phân biệt chữ in hoa và in thường]:

  • 26 chữ cái latinh hoa A,B,C…Z
  • 26 chữ cái latinh thường a,b,c …z.
  • 10 chữ số thập phân 0,1,2…9.
  • Các ký hiệu toán học: +, -, *, /, =, , [, ]
  • Các ký hiệu đặc biệt: :. , ; ” ‘ _ @ # $ ! ^ [ ] { } …
  • Dấu cách hay khoảng trống, xuống hàng [\n] và tab [\t]

3. Từ khóa

Là các từ mà ngôn ngữ C đã xây dựng sẵn và có những chức năng nhất định, sau này làm nhiều các bạn sẽ biết dần dần. Chúng ta không nên định nghĩa lại những từ khóa này.

asm • auto • break • case • cdecl • char • class • const • continue • _cs • default • delete • do double • _ds • else • enum • _es • extern • _export • far • _fastcall • float • for •friend • goto • huge • if • inline • int • interrupt • _loadds • long • near • new • operator • pascal • private • protected • public • register • return • _saveregs • _seg • short •signed • sizeof • _ss • static • struct • switch • template • this • typedef • union • unsigned • virtual • void • volatile • while

4. Kiểu dữ liệu

Trong cuộc sống có nhiều loại vật dụng để chứa đựng các thứ khác nhau như Rổ để đựng rau, Cốc [ca] để đựng nước. Cũng giống vậy, trong lập trình có các kiểu dữ liệu để có thể biểu diễn [lưu trữ] các thành phần tương ứng.

Mỗi kiểu dữ liệu sẽ có kích thước [chiếm diện tích], loại giá trị và miền giá trị khác nhau trong bộ nhớ máy tính khi sử dụng. Dưới đây là một số kiểu dữ liệu cơ bản hay dùng trong C.

Loại dữ liệu Kiểu dữ liệu Kích thước [byte] Miền giá trị
Kiểu Ký tự char 1 -128 đến 127
unsigned char 1 0 đến 255
Kiểu Số nguyên short 2 -32768 đến 32767
int 4 -2147483648 đến 2147483647
long 4 -2147483648 đến 2147483647
long long 8 -9223372036854775808 đến 9223372036854775807
Kiểu Số thực float 4 1.175494-38 đến 3.40282338
double 8 2.225074308 đến 1.797693308
long double 12 3.362103-4932 đến 1.1897314932

Lưu ý:

  • Trên đây là bảng thông tin của một số kiểu dữ liệu thông dụng hay dùng. Còn khá nhiều kiểu dữ liệu khác nhưng tôi không đưa vào, các bạn có thể tham khảo tại đây cho Kiểu số nguyên, đây cho kiểu số thực
  • Do C [hoặc C++] có nhiều phiên bản khác nhau và dùng trên các hệ điều hành khác nhau nên có thể giá trị và kích thức các kiểu dữ liệu cũng khác nhau. Bảng trên là tôi kiểm tra trên win 7, Dev-C 5.11.

Các bạn có thể dùng chương trình sau chạy và kiểm tra kết quả:

#include #include // limits for interger #include // limits for float int main[] { printf["TYPE %6s %20s %20s\n", "SIZE", "MIN VALUE", "MAX VALUE"]; printf["char: %6ld byte %20d %20d\n", sizeof[char], CHAR_MIN, CHAR_MAX]; printf["unsigned char: %6ld byte %20d %20d\n", sizeof[unsigned char], 0, UCHAR_MAX]; printf["short: %6ld byte %20d %20d\n", sizeof[short], SHRT_MIN, SHRT_MAX]; printf["int: %6ld byte %20d %20d\n", sizeof[int], INT_MIN, INT_MAX]; printf["long: %6ld byte %20ld %20ld\n", sizeof[long], LONG_MIN, LONG_MAX]; printf["long long: %6ld byte %20lld %20lld\n", sizeof[long long], LLONG_MIN, LLONG_MAX]; printf["float: %6ld byte %20e %20e\n", sizeof[float], FLT_MIN, FLT_MAX]; printf["double: %6ld byte %20e %20e\n", sizeof[double], DBL_MIN, DBL_MAX]; printf["long double: %6ld byte %20Le %20Le\n", sizeof[long double], LDBL_MIN, LDBL_MAX]; return 0; }

5. Tên

Mỗi chúng ta ai cũng có tên, do vậy trong lập trình C các thành phần cũng sẽ có tên. Ví dụ như tên hàm, tên biến, tên hằng số, tên nhãn,…

Tên hợp lệ là một chuỗi liên tiếp gồm ký tự chữ, số hoặc dấu gạch dưới. Tên phân biệt chữ hoa chữ thường và không trùng với từ khóa.

  • Tên phân biệt chữ hóa chữ thường nên: a khác A, quan khác Quan.
  • VD Các tên đúng: a, quan, nguyenvanquan7826, quan_7826, _7826, _nhung, _123huong.
  • **VD Các tên sai: **
Tên sai Nguyên nhân
1 Bắt đầu bằng số
1a Bắt đầu bằng số
quan 7826 Chứa dấu cách
quan-7826 Chứa dấu gạch ngang
f[x] Chứa dấu ngoặc nhọn
int Trùng với từ khóa

6. Biến

Tương ứng với mỗi kiểu dữ liệu chúng ta có các biến thuộc các kiểu đó và có miền giá trị tương ứng như trên dùng để lưu giá trị. Các bạn cần phân biệt kiểu và biến.

VD cái rổ A để đựng rau muống, cái rổ B để đựng rau cần và chúng cùng là rổ, thì tương ứng biến a lưu giá trị số 5, còn biến b lưu giá trị số 9 mặc dù chúng cùng kiểu số nguyên.

Biến có thể thay đổi giá trị trong quá trình chạy chương trình.

6.1 Khai báo biến

Để khai báo biến ta dùng cú pháp:

Kiểu_dữ_liệu Danh_sách_tên_biến;

Lý thuyết thì hơi dài, các bạn xem và chạy chương trình sau sẽ thấy cụ thể hơn:

#include int main[] { int a, b; // khai bao 2 bien kieu so nguyen float c; // khai bao 1 bien kieu so thuc // Gan gia tri cho cac bien a = 1; b = 2; c = 3.4; // vua khai bao bien vua gan gia tri int e = 4, f = 6; printf["a = %d; b = %d\n", a, b]; printf["c = %f\n", c]; printf["e = %d; f = %d\n", e, f]; return 0; }

Như trên các bạn thấy cấu trúc khai báo rồi đó. Còn về lệnh xuất ra màn hình các giá trị thì có một số điều khác đó là cách sử dụng %d, %f . Cái này mình sẽ nói cụ thể ở phần sau, đến đây các bạn cứ viết theo để thấy được cách khai báo biến là ok roài. !

6.2 Phạm vi của biến

Khi lập trình, bạn phải nắm rõ phạm vi của biến. Nếu khai báo và sử dụng không đúng, không rõ ràng sẽ dẫn đến sai sót khó kiểm soát được, vì vậy bạn cần phải xác định đúng vị trí, phạm vi sử dụng biến trước khi sử dụng biến.

Mỗi biến được khai báo ở đâu thì sẽ được dùng và có phạm vi hoạt động tương ứng từ nơi nó khai báo đến dấu đóng ngoặc nhọn } ngang cấp với nó.

Ví dụ chương trình sau.

#include int a = 1, b = 5; // khai bao bien toan cuc, no se duoc dung o bat ky dau ke tu dong nay. int main[] { // khai bao 2 bien trong ham main, no se duoc dung trong toan bo ham main ke tu dong nay int c = 4, d = 6; if[c < d] { int e = 6, d = 8; // khai bao bien e va d, no duoc dung trong doan nay. c = 7; printf["gia tri cac bien trong khoi:\n"]; printf["e = %d \t d = %d \t c = %d\n", e, d, c]; } // den day bien e, d vua khai bao khong con hoat dong nua. // printf["gia tri bien e = %d\n", e]; // lenh nay sai vi bien e khong con ton tai nua printf["gia tri cac bien trong ham main:\n"]; printf["c = %d \t d = %d\n", c, d]; printf["gia tri cac bien toan cuc:\n"]; printf["a = %d \t b = %d\n", a, b]; return 0; }

Các bạn chạy chương trình, xem kết quả và tự rút ra nhận xét nhá.

Trong này có một lời giải thích nhỏ với các bạn sau khi chạy chương trình là chúng ta có khai báo 2 biến d, và 2 biến d này do nằm trong 2 khối lệnh khác nhau [1 cái nằm trong hàm main, 1 cái nằm trong đoạn lệnh if ] nên chúng hoàn toàn khác nhau, không ảnh hưởng gì đến nhau. Nhưng biến c thì chỉ khai báo 1 lần, nên khi dùng c trong đoạn lệnh if thì chính là dùng biến c của hàm main đã khai báo và biến c đã được thay đổi giá trị.

7. Hằng

Hằng cũng giống như biến nhưng không thể thay đổi giá trị. Nếu bạn cố tình gán giá trị mới cho hằng thì sẽ bị sai.

Tên hằng thường viết in hoa để dễ nhận biết và phân biệt với biến.

Cú pháp khai báo hằng: #define TÊN_HẰNG giá_trị [Lưu ý không có dấu chấm phẩy ở cuối].

Các bạn chạy và xem kết quả của ví dụ sau:

#include #define AGE_MAX 150 // hang so #define C 'a' // hang ky tu #define NICK_NAME "nguyenvanquan7826" // hang chuoi int main[] { printf["hang AGE_MAX = %d\n", AGE_MAX]; printf["hang C = %c\n", C]; printf["hang NICK_NAME = %s\n", NICK_NAME]; // AGE_MAX = 10; // lenh nay sai vi hang khong the thay doi duoc gia tri return 0; }

Bài tập: Các bạn chạy các ví dụ ở trong bài và suy nghĩ rút ra nhận xét của riêng mình.

Video liên quan

Chủ Đề