Tại Sao Cần Xóa Bộ đệm Bàn Phím Trước Khi Nhập Chuỗi Trong C/C++?
Có thể bạn quan tâm
Nguyễn Tuấn
A guy with passionate at the code
- Trang chủ
- Lập trình
- Dữ liệu
- Cuộc sống
- Danh mục
- Thẻ thông tin
- Lưu trữ
- Thông tin
- GitHub
- RSS
Thông thường, khi nhập một chuỗi trong màn hình console, ta phải có thao tác xóa bộ nhớ đệm bàn phím. Nếu không có thể thấy rằng kết quả nhập chuỗi bị sai hoặc trôi đi mất.
Trong quá trình chạy chương trình ta sẽ phải nhập bằng bàn phím, mọi ký tự bạn gõ vào bàn phím (kể cả ký tự Enter \n) đều được đẩy vào bộ nhớ đệm trước khi được gán vào biến. Nếu trước đó bạn có nhập số bằng scanf hoặc cin, chúng chỉ nhận số chứ không nhận được ký tự Enter, và ký tự Enter vẫn còn trong bộ nhớ đệm. Đến khi nhập chuỗi, các hàm nhập chuỗi nhận được ký tự Enter thì dừng nhập luôn và chương trình vẫn chạy tiếp. Điều này khiến kết quả bị sai.
Bạn có thể sử dụng các hàm sau để thực hiện xóa bộ nhớ đệm.
flushall()Hàm này được định nghĩa trong stdio.h. Nó có tác dụng xóa bộ nhớ đệm tất cả các dòng nhập, xuất chuẩn và nhập xuất file.
fflush(stdin)Hàm fflush() trong thư viện stdio.h cũng có tác dụng tương tự flushall(). Tuy nhiên nó cho phép lựa chọn xóa bộ nhớ đệm cho stream nào. Ở đây ta truyền vào stdin để xóa bộ đệm cho dòng nhập chuẩn, tức là bàn phím.
cin.ignore()Đây là một phương thức của đối tượng cin trong C++. Phương thức này còn có những tham số khác nghĩa là bỏ qua hay loại bỏ một số lượng ký tự trong bộ đệm hoặc bỏ qua đến khi gặp ký tự nào đó. Nếu không có tham số thì mặc định là bỏ 1 ký tự trong bộ đệm. Dùng cách này hữu ích khi nhập dữ liệu chuyển từ số sang chữ.
Vậy nên dùng hàm nào? Hàm nào cũng được, flushall và fflush(stdin) có vẻ đơn giản hơn trong khi dùng cin.ignore() bạn phải cẩn thận, không lạm dụng để tránh sai ý muốn.
THẺ ĐÁNH DẤU c/c++- Tiếp
- Trước
Bình luận
Cảm ơn bạn
Your comment has been submitted and will be published once it has been approved. 😊
OK
- Tiếp
- Trước
- Chia sẻ với Facebook
- Chia sẻ với Twitter
Nguyễn Tuấn
A guy with passionate at the code Software Engineer Saigon, VietnamTừ khóa » Bộ đệm Stdin
-
Thắc Mắc Về Stdin Và Bộ đệm - Programming - Dạy Nhau Học
-
Tại Sao Cần Xóa Bộ đệm Bàn Phím Trước Khi Nhập Chuỗi? - Nam đạik
-
Loại Bỏ Bộ đệm Ruby stdin / Stdout - HelpEx
-
Cin.ignore() Và Fflush(stdin) Và điểm Khác Biệt Khi Tự Cài Stack Và ...
-
Fflush(stdin) Trong Ubuntu (linux)
-
C++: Cin.ignore() Thay Cho Fflush(stdin) - V1Study
-
Xoá Bộ đệm Bằng If(fgets(string, Size, Stdin) != NULL)
-
Lệnh Fflush(stdin) Dùng để Làm Gì? - Trắc Nghiệm Online
-
Nhập Xuất Cơ Bản Trong C — Modern C++
-
Hàm Fflush(stdin) Không Thể Dừng Màn Hình Console Trong C?
-
[C++] Hỏi Về String Rất Rất Cơ Bản? - UIT - Forum
-
Việc Sử Dụng Fflush (stdin) Trong Lập Trình C Là Gì
-
C — Làm Thế Nào để Xóa Stdin Trước Khi Nhận đầu Vào Mới?
-
Làm Thế Nào để Xóa Bộ đệm đầu Vào Trong C?
-
Lập Trình Hướng Đối Tượng C++ | Nguyen Minh Vuong Blog
-
Hàm Fflush Làm Sạch Bộ đệm | VnCoding