Escape Sequence (Dãy thoát) là gì?
Ký tự bắt đầu bằng backslash \ đại diện cho ký tự đặc biệt không in được hoặc khó gõ.
Bảng các Escape Sequence chuẩn
| Escape | Tên | ASCII | Mô tả |
|---|---|---|---|
\a | Alert (Bell) | 7 | Kêu beep |
\b | Backspace | 8 | Lùi 1 vị trí |
\f | Form feed | 12 | Trang mới (in ấn) |
\n | Newline | 10 | Xuống dòng (Line Feed) |
\r | Carriage return | 13 | Về đầu dòng |
\t | Horizontal tab | 9 | Tab ngang |
\v | Vertical tab | 11 | Tab dọc |
\\ | Backslash | 92 | In dấu \ |
\' | Single quote | 39 | In dấu ' trong char |
\" | Double quote | 34 | In dấu " trong string |
\? | Question mark | 63 | Tránh trigraph (hiếm dùng) |
\0 | Null | 0 | Kết thúc chuỗi |
\nnn | Octal | - | 1-3 chữ số bát phân (VD: \101 = 'A') |
\xhh | Hex | - | 1-2 chữ số hex (VD: \x41 = 'A') |
Chương trình demo
#include <stdio.h>
int main() {
printf("Escape sequences demo:\n\n");
printf("1. Newline \\n: Dong 1\nDong 2\n");
printf("2. Tab \\t: Cot1\tCot2\tCot3\n");
printf("3. Backspace \\b: ABC\bD (hien thi: ABD)\n");
printf("4. Carriage return \\r: 123\rAB (hien thi: AB3)\n");
printf("5. Backslash \\\\: Duong dan C:\\\\Windows\\\\System32\n");
printf("6. Quote \\\": Noi dung: \"Hello World\"\n");
printf("7. Alert \\a: ");
printf("\a"); // Kêu beep
printf(" (Da keu beep)\n");
printf("8. Octal \\101 = %c, Hex \\x42 = %c\n", '\101', '\x42');
return 0;
}
Kết quả
Escape sequences demo:
1. Newline \n: Dong 1
Dong 2
2. Tab \t: Cot1 Cot2 Cot3
3. Backspace \b: ABC\bD (hien thi: ABD)
4. Carriage return \r: 123\rAB (hien thi: AB3)
5. Backslash \\: Duong dan C:\Windows\System32
6. Quote \": Noi dung: "Hello World"
7. Alert \a: (Da keu beep)
8. Octal \101 = A, Hex \x42 = B
Raw String Literal (C11)
Tiền tố R để không xử lý escape:
const char *path = R"(C:\Users\Admin\Documents)";
// Thay vì: "C:\\Users\\Admin\\Documents"
const char *json = R"({
"name": "John",
"age": 30
})";
Ứng dụng thực tế
| Escape | Ứng dụng |
|---|---|
| \n | Xuống dòng trong printf, puts, file text |
| \t | Căn cột bảng, menu |
| \r | Progress bar, animation cùng dòng |
| \\ | Đường dẫn Windows, regex, JSON |
| \" | In dấu nháy trong chuỗi |
| \0 | Kết thúc chuỗi, binary data |
| \xhh | Gửi byte cụ thể qua serial/network |
Lưu ý
'\n'là 1 ký tự (char),"\n"là chuỗi 2 ký tự (\n + \0)- Trong
scanf,\ntrong format string = "bỏ qua whitespace" - Windows text file:
\r\n(CRLF), Unix:\n(LF) - Khi in ra terminal,
\rcho phép ghi đè dòng hiện tại (loading bar)
Ví dụ: Progress bar dùng \r
#include <stdio.h>
#include <unistd.h>
int main() {
for (int i = 0; i <= 100; i += 5) {
printf("\rTien do: [%3d%%] ", i);
fflush(stdout);
usleep(100000); // 100ms
}
printf("\nHoan tat!\n");
return 0;
}
Nắm vững escape sequence giúp kiểm soát đầu ra chính xác, xử lý file, giao tiếp thiết bị.