Lệnh read không hoạt động

image
Chương trình của em như trên, mặc dù có lệnh readln ở cuối chương trình(mục đích là để sau khi xuất ra kết quả thì dừng màn hình để em theo dõi kết quả), nhưng ngay sau khi xuất ra dữ liệu thì màn hình đen của pascal cũng tắt, khiến em không thể biết kết quả xuất ra như thế nào. Vẫn là chương trình đấy nhưng khi em thêm 1 lệnh readln nữa ở cuối thì lại hoạt động, tức là sau khi xuất ra kết quả cuối cùng thì màn hình đã dừng lại.
Mọi người có thể cho em biết đó là lỗi của phần mềm free pascal hay là code của em có vấn đề gì ạ?
Em cảm ơn.

read(a[i]); đọc tới ký tự không phải số là thoát nên buffer vẫn còn dấu xuống dòng.
readln; nhảy qua dòng mới, thành ra buffer rỗng. Lúc này readln; lần nữa mới cho nhập.

5 Likes

cho em hỏi ngu là buffer là gì vậy ạ

Trong máy tính, hệ điều hành của cậu phải tương tác với rất nhiều thiết bị nhập dữ liệu (bàn phím, chuột, tai nghe, etc). Một thiết kế thường gặp khi hệ điều hành tương tác với các thiết bị nhập là đọc dữ liệu từ thiết bị, và đưa nó vào “buffer” (bộ nhớ đệm). Các phần mềm sẽ đọc dữ liệu từ buffer (không phải trực tiếp từ thiết bị như bàn phím).

Kết nối với vấn đề của cậu, khi cậu gõ: “1” và phím enter, cậu sẽ có ký tự 1 và ký tự enter được đặt vào buffer.

  • Khi phần mềm thực hiện lệnh read, ký tự 1 được lấy ra từ buffer, và ký tự enter còn lại trong buffer.
  • Khi phần mềm thực hiện lệnh readln, ký tự enter được đọc ra. Đó là lý do phần mềm cậu không dừng lại, vì readln đã có được dữ liệu.
  • Nếu cậu thực hiện readln thêm 1 lần nữa, vì buffer đang rỗng, nên readln sẽ treo để chờ dữ liệu. Đó là lý do console sẽ không biến mất.

Hope it helps!

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