Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Hằng ký tự escape (Backslash character constants) trong C

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ả
\aAlert (Bell)7Kêu beep
\bBackspace8Lùi 1 vị trí
\fForm feed12Trang mới (in ấn)
\nNewline10Xuống dòng (Line Feed)
\rCarriage return13Về đầu dòng
\tHorizontal tab9Tab ngang
\vVertical tab11Tab dọc
\\Backslash92In dấu \
\'Single quote39In dấu ' trong char
\"Double quote34In dấu " trong string
\?Question mark63Tránh trigraph (hiếm dùng)
\0Null0Kết thúc chuỗi
\nnnOctal-1-3 chữ số bát phân (VD: \101 = 'A')
\xhhHex-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
\nXuống dòng trong printf, puts, file text
\tCăn cột bảng, menu
\rProgress bar, animation cùng dòng
\\Đường dẫn Windows, regex, JSON
\"In dấu nháy trong chuỗi
\0Kết thúc chuỗi, binary data
\xhhGử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, \n trong format string = "bỏ qua whitespace"
  • Windows text file: \r\n (CRLF), Unix: \n (LF)
  • Khi in ra terminal, \r cho 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ị.