jak zrobić pętle w c++

0

mam problem bo chcę zrobić pętle w c++ która się powtarza do momentu gdy nie wcisne przycisk.Ale co mam na razie zrobione powtarza się wtedy gdy zostanie wciśnięty inny przycisk niż enter i jedno wciśnięcie przycisku to jedno powtórzenie. Nie wiem czym zastąpić komendę getch().

 do {

 Sleep(500);
 cout<<"\b\b\b";
  cout<<"   ";
  Sleep(500);
  cout<<"\b\b\b";
  cout<<" <=";

 int getch(void);
}  while( getch()!=13 );
2

Standardowe wejście nie jest interaktywne w takim stopniu jak sobie wyobrażasz. Standardowe wejście połączone z terminalem, czyta dane od użytkowania date tylko pełnymi liniami (żeby użytkownik miał możliwość poprawiania danych podczas pisania).
Musisz wyjść poza bibliotekę standardową, żeby to zrobić, np używając ncurses

1

Chwile poszukałem w sieci jak to zrobić aby działało na większej ilości platform z użyciem tylko biblioteki standardowej i znalazłem sugestię że można to zrobić przy pomocy wątków.
Z ciekawości napisałem coś takiego:

#include <iostream>
#include <future>
#include <thread>

void waitForEndChar() {
  std::string buffer;
  do {
    std::getline(std::cin, buffer);
  } while (!buffer.empty());
}

int main() {
  using namespace std::chrono_literals;

  std::future<void> future = std::async(waitForEndChar);

  do {
    std::cout << "TEST\n";
    std::this_thread::sleep_for(2s);
  } while (future.wait_for(0s) != std::future_status::ready);

  std::cout << "END";
}

Ale szczerze mówiąc odradzał bym użycie tego, nie wiem na ile to jest bezpieczne.
Według mnie sugestia @MarekR22 aby użyć ncurses będzie najlepsza.
Sprawa też będzie odrobinę inaczej wyglądała jeśli ograniczasz swój kod do specyficznych platform, wtedy możesz w ich API znaleźć odpowiednie funkcje.

0

Pod windows można też użyć WinAPI
https://docs.microsoft.com/en[...]ows/console/console-functions

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0