Mã này đến từ K & R. Tôi đã đọc nó nhiều lần, nhưng nó vẫn có vẻ để thoát khỏi sự nắm bắt của tôi.Hãy giải thích ví dụ này Mã C
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void)
{
return(bufp>0)?buf[--bufp]:getchar();
}
int ungetch(int c)
{
if(bufp>=BUFSIZE)
printf("too many characters");
else buf[bufp++]=c;
}
Mục đích của hai chức năng này, vì vậy K & R cho biết, là ngăn chương trình đọc quá nhiều đầu vào. tức là không có mã này, một hàm có thể không xác định được nó đã đọc đủ dữ liệu mà không đọc quá nhiều lần. Nhưng tôi không hiểu nó hoạt động ra sao.
Ví dụ: hãy xem xét getch(). Theo như tôi có thể thấy đây là các bước cần:
- kiểm tra nếu bufp lớn hơn 0.
- nếu như vậy thì trả về giá trị char của buf [- bufp].
- khác trả về getchar().
Tôi muốn đặt câu hỏi cụ thể hơn, nhưng tôi không biết mã này đạt được mục đích như thế nào, vì vậy câu hỏi của tôi là: (a) mục đích và (b) lý luận là gì của mã này?
Xin cảm ơn trước.
LƯU Ý: Đối với bất kỳ fan R K &, mã này có thể được tìm thấy trên trang 79 (tùy thuộc vào phiên bản của bạn, tôi giả sử)
Phép thử bên trong 'ungetch' có thể liên quan đến' bufp' không phải 'printf' trong điều kiện của nó. Tôi đoán nó là một lỗi đánh máy. –
Tôi hiện không có K & R, nhưng tôi nghĩ rằng trong trường hợp không có, điều kiện if phải là 'bufp> = BUFSIZE' – kol
Xin lỗi, có lẽ là lỗi của tôi. SOmeone đã sửa nó ngay bây giờ, vì vậy tôi không thể nhớ những gì tôi đã nhập orginally. –