Tôi vừa rồi cái này Tôi tìm thấy một bình luận nói rằng nó được sử dụng trong điều kiện vòng lặp iostream::eof
“Gần như chắc chắn là sai.” Tôi thường sử dụng một cái gì đó như trong khi(cin>>n)
Có điều gì đó - tôi đoán nó ngầm kiểm tra EOF.
Tại sao sử dụng trong khi (!cin.eof())
Có sai khi kiểm tra rõ ràng eof không?
Nó được sử dụng trong ngôn ngữ C scanf("...",...)!=EOF
Sự khác biệt là gì (tôi sử dụng nó thường xuyên mà không gặp vấn đề gì)?
因为 iostream::eof
sẽ chỉ trở lại ĐÚNG VẬY
after Đọc phần cuối của luồng. NóKHÔNGCho biết lần đọc tiếp theo sẽ là từ cuối luồng.
Hãy xem xét điều này (và giả sử lần đọc tiếp theo sẽ ở cuối luồng):
while(!inStream.eof()){
dữ liệu int;
// yay, vẫn chưa kết thúc luồng, giờ hãy đọc ...
trong dòng >> dữ liệu;
// ồ chết tiệt, bây giờ chúng ta đọc phần cuối và *chỉ* bây giờ bit eof sẽ được đặt (cũng như bit bị lỗi)
// thực hiện các thao tác với dữ liệu (hiện chưa được khởi tạo)
}
phản đối:
dữ liệu int;
while(inStream >> dữ liệu){
// khi đến đây, chúng ta có thể chắc chắn rằng quá trình đọc đã thành công.
// nếu không, luồng trả về từ operator>> sẽ được chuyển thành false
// và vòng lặp thậm chí sẽ không được nhập
// thực hiện công việc với dữ liệu được khởi tạo chính xác (hy vọng vậy)
}
Về câu hỏi thứ hai của bạn: bởi vì
if(scanf("...",...)!=EOF)
Và
như nhau
if(!(inStream >> data).eof())
VàKHÔNGNhư nhau
if(!inStream.eof())
inFile >> dữ liệu
Tôi là một lập trình viên xuất sắc, rất giỏi!