Obecnie mam program, który czyta ze standardowego wejścia, czasami program musi po prostu działać, jeśli nie wprowadzono żadnych danych, zwykle jest to skrypt testowy, nie ma "wprowadź", że tak powiem.non-blocking std :: getline, zakończ jeśli nie wprowadzono
program -v1 -v2 -v3 <input >output
v1 - v3 są argumenty linii poleceń odpowiednio
Zasadniczo program wypluwa argumenty wiersza polecenia i ich odpowiednie znaczenie programu, jeżeli nie „wejście” jest podana, a następnie powinien wyjść.
Jednak w tej chwili, jeśli nadaj mu pusty plik testowy lub po prostu uruchom bez naciśnięcia klawisza Enter po uruchomieniu bloków na std :: getline używam do wprowadzania poleceń.
while(std::getline(std::cin,foo)
{do stuff}
gdzie foo jest ciągiem.
Co najmniej jeden raz uruchomić, a następnie do stuff
, a następnie wyjść w przypadku braku danych wejściowych? W przypadku wprowadzenia, do stuff
występuje raz dla każdej linii standardowego wejścia.
Czy można przełączyć się na pętlę do-while z pętlą sprawdzającą, czy ma jakieś dane wejściowe?
Coś
if cin empty
set flag
do
{do stuff
check flag}
while(getline)
lub jest non-blocking IO nie jest możliwe w C++?
To pytanie wydaje się być odświeżane w kółko, ale nie mogłem znaleźć ostatecznej odpowiedzi, a nawet odpowiedzi, która była niezależna od platformy (ten program ma charakter akademicki, jest kodowany w oknach i testowany na systemie UNIX).
czy mówisz, że chcesz uruchomić pętlę raz bez względu na wszystko, a następnie wyjść, jeśli przed wywołaniem getline nie zostanie podane żadne dane wejściowe? –
możliwy duplikat [sprawdzanie dostępności danych przed wywołaniem std :: getline] (http://stackoverflow.com/questions/3317740/checking-data-availability-before-calling-stdgetline) Niestety, prawdopodobnie nie ma przenośnego sposobu zrobić to w standardowym C++. – jrok
Czy możesz użyć niektórych funkcji niskiego poziomu z C? – Zaffy