stdout là dòng đệm khi kết nối với một thiết bị đầu cuối, nhưng tôi nhớ đọc ở đâu đó mà đọc (ít nhất là từ stdin) sẽ tự động tuôn ra stdout. Tất cả các triển khai C mà tôi đã sử dụng đã làm điều này, nhưng bây giờ tôi không thể tìm thấy nó trong tiêu chuẩn.Có đọc từ stdin flush stdout không?
Nó có ý nghĩa rằng nó hoạt động như vậy, nếu không mã như thế này:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
sẽ cần thêm fflush(stdout);
Vậy là stdout đảm bảo được rửa ở đây?
EDIT:
Như nhiều trả lời đã nói, có vẻ là không đảm bảo trong tiêu chuẩn mà đầu ra để thiết bị xuất chuẩn trong ví dụ của tôi sẽ xuất hiện trước khi đọc từ stdin, nhưng mặt khác , ý định này được nêu trong (dự thảo rảnh rỗi bản sao) tiêu chuẩn:
các đầu vào và đầu ra năng động của thiết bị tương tác sẽ diễn ra theo quy định tại 7.19.3. Mục đích của các yêu cầu này là không có sản phẩm hoặc dòng đệm được xuất hiện ngay sau càng tốt, để đảm bảo rằng các thông báo thực sự xuất hiện trước một chương trình đang chờ đầu vào.
(ISO/IEC 9899: Bản thảo ủy ban TC2 - ngày 6 tháng 5 năm 2005, trang 14).
Vì vậy, có vẻ như không có bảo đảm, nhưng có thể nó sẽ hoạt động trong hầu hết các triển khai. (Những từ cuối cùng nổi tiếng ...)
Theo tham chiếu chéo tới 7.19.3 (7.21.3 trong C11) cũng hữu ích, vì nó đề cập đến những hoạt động đầu vào nào được mong đợi sẽ gây ra xả. Chúng được thảo luận tại https://stackoverflow.com/a/39536803/8586227. –