Hiện tại tôi có một chương trình đọc từ đầu vào chuẩn, đôi khi chương trình cần tiếp tục chạy nếu không có đầu vào nào, thường là tập lệnh thử nghiệm không có 'nhập' để nói.std không chặn :: getline, thoát nếu không có đầu vào
program -v1 -v2 -v3 <input >output
v1 - v3 là đối số dòng lệnh tương ứng
Về cơ bản các chương trình spits ra các đối số dòng lệnh và ý nghĩa tương ứng của họ đối với chương trình nếu không có 'đầu vào' được đưa ra và sau đó nên thoát.
Tuy nhiên tại thời điểm này, nếu cho nó một tệp kiểm tra trống hoặc chỉ chạy mà không cần nhấn enter sau khi chạy nó chặn trên std :: getline tôi sử dụng để nhập lệnh.
while(std::getline(std::cin,foo)
{do stuff}
trong đó foo là một chuỗi.
Làm cách nào để chạy ứng dụng và chỉ cần chạy qua và do stuff
ít nhất một lần rồi thoát ra trong trường hợp không có đầu vào? Trong trường hợp đầu vào, do stuff
xảy ra một lần cho mỗi dòng trong đầu vào tiêu chuẩn.
Có chuyển đổi sang vòng lặp do-while hay không, với vòng lặp kiểm tra xem liệu nó có đầu vào, hoạt động không?
Something như
if cin empty
set flag
do
{do stuff
check flag}
while(getline)
hoặc là non-blocking io không thể trong C++?
Câu hỏi này dường như được phục hồi nhiều lần nhưng tôi không thể tìm thấy câu trả lời dứt khoát hoặc thậm chí câu trả lời là nền tảng bất khả tri (chương trình này có tính chất học thuật, được mã hóa trên cửa sổ và được kiểm tra trên Unix).
vì vậy bạn có nói rằng bạn muốn vòng lặp chạy một lần bất kể điều gì, sau đó thoát ra nếu không có đầu vào nào được đưa ra trước cuộc gọi getline? –
có thể trùng lặp của [kiểm tra tính khả dụng của dữ liệu trước khi gọi std :: getline] (http://stackoverflow.com/questions/3317740/checking-data-availability-before-calling-stdgetline) Thật không may, có lẽ không phải là một cách di động để làm điều này trong tiêu chuẩn C++. – jrok
Bạn có thể sử dụng một số chức năng cấp thấp từ C không? – Zaffy