Thắc mắc về stdin và bộ đệm

Mọi người cho mình hỏi chút…mình chưa phân biệt được giứa stdin với bộ đệm bàn phím…Có phải khi mình nhập dữ liệu từ bàn phím thì dữ liệu được đưa vào bộ đệm đến khi mình gõ phím Enter thì mới chuyển vào stdin không ạ…Trong quyen C của Gs Phạm Văn Ất có nói:
Khi máy đang dừng sau câu lệnh scanf…mà mình nhập dữ liệu thì dữ liệu ấy sẽ được chuyển vào stdin…còn các trường hợp khác thì gưi vào bộ đệm nhưng mình chưa hiểu rõ lắm…mọi người chỉ giáo…

Nhưng anh ơi…em hiểu thế này có đúng không ạ…khi mình nhập dữ liệu từ bàn phím thì các kí tự sẽ được lưu trên bộ đệm trước (để có thể chỉnh sửa) đến khi mình ấn phím Enter thì các kí tự lại được chuyển vào stdin…

Phím Enter vẫn là 1 kí tự trong bảng mã ASCII thôi bạn. Chương trình bạn viết yêu cầu đọc dữ liệu từ buffer thì nó sẽ đọc, còn tùy bạn muốn đọc bao nhiêu. Nếu đọc 1 dòng thì khi nào gặp kí tự Enter thì sẽ không đọc nữa.

“Phím Enter vẫn là 1 kí tự trong bảng mã ASCII thôi bạn. Chương trình bạn viết yêu cầu đọc dữ liệu từ buffer thì nó sẽ đọc, còn tùy bạn muốn đọc bao nhiêu. Nếu đọc 1 dòng thì khi nào gặp kí tự Enter thì sẽ không đọc nữa.”
bạn có thể nói rõ hơn dược không ạ…mình là newbie nên không hiểu cho lắm…bạn có thể giải thích cơ chế cho mình không…thank

Anh Đạt ơi em cũng hiểu như bạn Ngo Dinh Quyen là
khi mình nhập dữ liệu từ bàn phím thì các kí tự sẽ được lưu trên bộ đệm trước đến khi mình ấn phím Enter thì các kí tự lại được chuyển vào stdin.
Như vậy có đúng không ạ

image
Trích trong sách lập trình C của GS Phạm Văn Ất nhé

1 Like

Standard stream (stdin stderr stdout) đều là buffered input stream mới nhức đầu chớ :smiley:
Nghĩa là chừng nào bộ đệm rỗng thì nó mới hiện dấu nhắc cho nhập, không thì nó cứ lấy từ bộ đệm thôi. VD: Khi dấu nhắc xuất hiện sau lệnh getchar bạn có thể nhập 1 lần 100 char =)) nó lấy có 1 thôi :smiley:

Bộ đệm bàn phím thực ra là chi tiết ngoài chương trình C :smiley: nên tạm thời bỏ qua.

Tức là getchkbhit là tức thì vì nó là hàm của Windows, và không bắt được bằng các hàm chuẩn.

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