[Video] Ngôn Ngữ C - 57 - Giới thiệu bộ đệm - buffer

Nội Dung:
Bài này Đạt sẽ giới thiệu về bộ đệm - buffer trong C. Trong C các hàm input, ouput như getchar, getch, getche, putchar, putch phụ thuộc vào hệ điều hành và phần cứng.

Trong ví dụ này Đạt sẽ giải thích tại sao khi sử dụng hàm getchar() ta phải enter để nhập dữ liệu. Trong khi đó getch lại không.

Lý do là vì getchar() sử dụng bộ đệm - buffer

  • Lý do cần bộ đệm
  • Tiết kiệm việc chuyển dữ liệu từ input tới chương trình
  • Có thể sử được nội dung trước khi gửi
  • Chỉ khi nào enter mới gửi dữ liệu đi
  • Lý do không cần bộ đệm
  • Chơi game
  • Các chương trình tương tác với bàn phím trực tiếp

Trong C có 2 loại bộ đệm

  • Fully buffered - dạng file
  • Line bufered - dạng nhập từ bàn phím

Source code:

#include <stdio.h>

int main(void)
{
    char ch;
    /* while ((ch = getchar()) != '#')
        putchar(ch); */
    while ((ch = getche()) != '#')
        putch(ch);
    return 0;
}

Câu hỏi cho phần này: Các bạn hãy tìm kích thước của bộ đệm trên máy của các bạn

7 Likes

@ltd chà chà getche() với putch() hơi mới quá :smiley: , chắc là getc(), putc() chứ nhỉ?

4 Likes

Trong bài này em demo sự khác biệt giữa buffered và unbuffered nên em dùng 3 hàm unbuffered của Windows

  • getche() : nhận vào từ bàn phím, in ra ngoài ngay luôn
  • getch() : nhận vào từ bàn phím, không in ra ngoài
  • putch() : in ra ngoài ngay lập tức

để so sánh với 2 hàm buffered của <stdio.h>

  • getchar()
  • putchar()

Các hàm này mặc định đều sử dụng stdin. Trong khi đó, getc()putc() cho phép mình chọn stream vào là file hoặc stdin.

3 Likes

Tại thấy không phải hàm chuẩn nên tớ hỏi, chứ ba hàm kia là của Windows, thì trong bài viết Đạt note là chỉ áp dụng cho Windows thôi.

4 Likes

I moved 2 posts to a new topic: Video về con trỏ?

anh cho em hỏi tý ạ:
em muốn biết trong bộ đêm có gì thì sao ạ, ví dụ em viết 1 chương trình để chương trình nhập số nguyên ,và kiểm tra số đó có phải số không bằng cách kiểm tra buffer ạ.
vd: nhập 12A thì 12 vào biến và A\0 ở trong buffer , làm sao xác định rỏ buffer chứa gì?

Tốt hơn là bạn cứ đọc hết những gì người dùng nhập rồi xử lí nhé.

2 Likes

A post was split to a new topic: Học xong ngôn ngữ lập trình C thì học gì tiếp?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?