• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Omijanie cin w C++

Object Storage Arubacloud
0 głosów
369 wizyt
pytanie zadane 7 lipca 2017 w C i C++ przez .KML Nowicjusz (120 p.)
Witam! Mam pewien problem otóż tworzę prostą grę w konsoli. Mam pętlę, która dodaje surowce co 3 sekundy, lecz w tej pętli jest również zapytanie o to, jaką budowlę chcemy, ulepszyć jest tam cin, który zatrzymuję program i czeka na klienta. Chciałbym, aby cin nie zatrzymywał, programu tylko wykonał się, wtedy gdy klient coś wpiszę. Z góry dziękuję za pomoc.

2 odpowiedzi

+1 głos
odpowiedź 7 lipca 2017 przez Evelek Nałogowiec (28,960 p.)
Zrób to na dwóch wątkach - jeden zajmuje sie surowcami a drugi interakcją z użytkownikiem.
–1 głos
odpowiedź 7 lipca 2017 przez VirtualMember Pasjonat (15,790 p.)

Chodzi Tobie o to by program jakkolwiek zareagował na wpisaną komendę dopiero po wciśnięciu enter? Być może są na to jakieś prostsze sposoby, lecz sam jakiś czas temu potrzebowałem takiego rozwiązania i udało mi się stworzyć taki system, który reaguje na komendy dopiero wówczas gdy zostanie wciśnięty enter. 

Run-Time UI Console

W Console .cpp masz taki konstruktor a w nim przykładowe wgranie komendy

Console::Console()
{
	functionDataBase.emplace( "help", &Console::help );
}

W cudzysłów wpisujesz pierwszą frazę tekstu, na który ma reagować konsola. "&Console::help" to wskazanie funkcji, która ma się wywołać. Potem masz jeszcze przykładową metodę niżej:

/*EXAMPLE OF USE*/
/*
 * Write "test all" in console to use example
 */
void Console::help( std::vector<std::string>& suffixes )
{
	Corrector corrector;

	if ( corrector.checkTypeCompatibility( std::vector<size_t>{
		typeid(std::string).hash_code()},
		suffixes, 1 ) )
	{
		Printer printer;

		if ( suffixes[0] == "all" )
		{
			printer.print( "help.txt", Printer::mode_t::DEFAULT );
			return;
		}

		 printer.print( "source/printer/instructions/help.txt", Printer::mode_t::DEFAULT ) ;
	}
}

która sprawdza czy dodatkowe argumenty się zgadzają (ich typy i ewentualnie wartości). 

I jeszcze dwie linijki w mainie by rozpocząć pracę konsoli:

Console console;
console.startWork();

Po tym, dopóki program działa, będzie chodziła obsługa komend bez zatrzymywania programu. 

Na bazie tej wiedzy możesz szybko zbudować analogiczne metody, które będą obsługiwały inne "komendy"

W razie pytań pisz ;)

Podobne pytania

0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 11 maja 2020 w C i C++ przez Maciex0n Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 170 wizyt
pytanie zadane 14 października 2018 w C i C++ przez Sanchezklub Początkujący (400 p.)
0 głosów
1 odpowiedź 931 wizyt
pytanie zadane 13 maja 2015 w C i C++ przez VeNeSky Początkujący (350 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...