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");