Tôi muốn làm rõ câu trả lời cho đến nay vì họ dường như sử dụng cụm từ như "gửi EOF", "nhận EOF", "nhân vật EOF", vv Theo nhận xét (cảm ơn) cho câu trả lời này, "gửi EOF" và "nhận EOF" là các điều khoản hợp pháp, nhưng xin đừng nghĩ rằng đó là một nhân vật.
EOF không phải là một ký tự nào cả. Đó là giá trị getchar() (hoặc fgetc/getc) trả về nếu luồng ở "cuối tập tin" hoặc lỗi đọc xảy ra. Nó chỉ đơn thuần là một giá trị đặc biệt nằm ngoài phạm vi giá trị ký tự mà getchar() sẽ trả về cho biết điều kiện lỗi hoặc cuối tệp.
Nó được xác định bởi tiêu chuẩn C là âm, trong khi getchar trả về các ký tự dưới dạng ký tự chưa được chuyển đổi thành int.
Chỉnh sửa: Khi thực hiện một số nghiên cứu mà tôi nên thực hiện trước đoạn tôi viết đã từng ở đây, tôi đã nhận ra một số giả định của tôi hoàn toàn sai. Cảm ơn người bình luận đã chỉ ra điều này.
Khi một luồng (như stdin) ở điều kiện cuối tệp, điều kiện này có thể được xóa lại với clearerr() và getchar() có thể đọc thêm dữ liệu từ stdin.
CTRL Z trong vùng đất số – EvilTeach
Tại sao tôi nhận được hai phiếu giảm giá? –
FWIW, tôi không downvote bạn. Tuy nhiên, không có những thứ như một nhân vật EOF, vì vậy đó có thể là lý do tại sao. Khi người dùng nhấn^D (hoặc bất kỳ điều gì) trên một thiết bị đầu cuối, nó gây ra một điều kiện EOF trên quá trình 'stdin (nó được đóng bởi shell), không có nhân vật nào liên quan. – Chris