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

Hàm ungetc() trong C/C++

Hàm ungetc() đẩy một ký tự ngược lại vào input stream, để lần đọc sau sẽ đọc được ký tự đó lại. Hữu ích khi cần "peek" ký tự tiếp theo mà không tiêu thụ nó.

Cú pháp

int ungetc(int c, FILE *stream);

Tham số: c – ký tự đẩy lại; stream – file stream. Trả về ký tự đã đẩy lại, hoặc EOF nếu lỗi.

Ví dụ

#include <stdio.h>

int main() {
    int c;
    printf("Nhap chuoi (ket thuc bang 0): ");
    while ((c = getchar()) != '0')
        putchar(c);
    
    ungetc(c, stdin);  // Day '0' nguoc lai stdin
    c = getchar();     // Doc lai '0'
    putchar(c);
    puts("");
    printf("Ket thuc!");
    return 0;
}

Kết quả (nhập: sabc0)

sabc
0
Ket thuc!

Giải thích: Vòng lặp đọc cho đến gặp '0'. '0' không in ra (điều kiện while false). ungetc đẩy '0' về stdin. getchar() tiếp theo đọc lại '0' và in ra.

Quy tắc:
  • Chỉ đảm bảo đẩy lại được 1 ký tự (có thể hơn tùy implementation).
  • Không thể đẩy lại EOF.
  • Sau fseek, fsetpos, rewind, bộ nhớ đẩy lại bị mất.
  • Dùng cho parser cần lookahead 1 ký tự.