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

Sử dụng fflush(stdin) trong C

Hàm fflush() xóa buffer xuất (output buffer) của stream. Chuẩn C chỉ định nghĩa hành vi cho output stream hoặc update stream sau ghi. Dùng fflush(stdin) là undefined behavior theo chuẩn C.

Cú pháp

int fflush(FILE *stream);

Trả về 0 nếu thành công, EOF nếu lỗi.

Ví dụ (chỉ minh họa, KHÔNG KHUYẾN KHÍCH)

#include <stdio.h>

int main() {
    char s[20] = "Helloworld";
    printf("Chuoi: %s", s);
    fflush(stdin);  // UNDEFINED BEHAVIOR!
    return 0;
}

Kết quả

Chuoi: Helloworld
CẢNH BÁO: fflush(stdin) KHÔNG CHUẨN C. Một số compiler (MSVC) cho phép xóa input buffer, nhưng GCC/Clang/Linux không hỗ trợ. Dùng sẽ gây UB, code không portable.

Cách đúng xóa input buffer (stdin)

// Cach 1: Doc het ky tu con lai den newline/EOF
int c;
while ((c = getchar()) != '\n' && c != EOF);

// Cach 2: Dung fgets doc bo dong
char buf[1024];
fgets(buf, sizeof(buf), stdin);

fflush(stdout) – Chuẩn và hữu ích

Buộc in ra màn hình ngay lập tức (không chờ buffer đầy hoặc newline):

printf("Dang xu ly... ");
fflush(stdout);  // Dam bao hien thi truoc khi tinh toan lau
// ... heavy computation ...
printf("Xong\n");